我正在使用LINQ优化数据库中的图像检索。
图像大小约为4000 * 1000像素,重量约为400-600KB。
图像是通过一个控制器检索的,控制器由一个webservice调用。通过jQuery调用Web服务。
第一张图像大约在0.7秒到1.5秒内被检索,随后的图像需要3到4秒。
从数据库读取图像的代码没有包围在using { }中,我很难了解如何将这个子句与简单返回字节数组的方法一起使用。
有什么方法可以提高这里的表现吗?
谢谢
编辑:,我将在得到结果后运行分析并发布代码。谢谢
发布于 2010-07-27 08:27:06
根据我对您的问题的理解,图像是通过web服务检索的,这意味着图像被检索,在SOAP消息中被绑定,通过有线发送,在客户端( LINQ查询所在的地方)未绑定。这总是很慢的。实际发送的数据是实际图像BLOB的1.5至2.0倍。
以这种方式从数据库中获取巨大的气泡总是性能的噩梦。如果需要查询它们(使用LINQ),请考虑只查询元数据。一旦您有了所需的图像ID,您将检索整个图像。
然而,它不会很快变得完美。为了获得更好的性能,每个检索到的映像都应该缓存在您的服务器上(在web服务检索之后),并且不应该超过一次。这种类型的缓存应该是微不足道的实现。或者,您不应该将图像存储为BLOB,但这在设计阶段可能为时已晚。
using上的注意事项:只需将其用于实现IDisposable的任何变量。但是,并不是说这会导致性能下降。
发布于 2010-07-27 08:21:46
如果没有实际的源代码,就很难说出任何东西。更糟糕的是,很难用所述代码说出任何明智的话:程序员很难从经验中发现瓶颈。您需要的是一个体面的服务器端性能分析器(例如dotTrace)和客户端HTTP分析器(如费德勒)。
有了服务器端的代码,您将看到哪些代码行最需要时间来执行,然后尝试根据这些知识进行改进。也许,您从DB中提取了过多的数据,或者它缺少适当的索引。
客户端分析器将向您显示在响应中发送了哪些HTTP头(请记住,HTTP中的缓存是最重要的),以及通常情况下执行请求的时间。
https://stackoverflow.com/questions/3341780
复制相似问题