使用LINQ进行图像检索优化

时间:2010-07-27 08:17:58

标签: c# linq linq-to-sql image-processing image-manipulation

我正在使用LINQ优化从数据库中检索图像。

近似图像尺寸为4000 * 1000像素,重约400-600KB。

通过web服务调用的控制器检索图像。通过jQuery调用Web服务。

第一张图像在约0.7 - 1.5秒内被检索,当后续图像需要3至4秒时间。

using { }中没有包含从数据库读取图像的代码,我很难看到如何将这个子句与只返回字节数组的方法一起使用。

有没有办法改善这里的表现?

谢谢

编辑:我将运行分析并在收到结果后发布代码。谢谢

2 个答案:

答案 0 :(得分:3)

如果没有实际的源代码,很难说出来。更糟糕的是,很难说 所谓的代码:程序员在经验上找到瓶颈是非常糟糕的。您需要的是一个体面的服务器端性能分析器(例如dotTrace)和客户端HTTP分析器(如Fiddler)。

使用服务器端,您将看到哪些代码行需要花费最多的时间来执行,然后根据这些知识尝试改进。也许,你从数据库中提取过多的数据,或者它缺少适当的索引。

客户端分析器将向您显示与您的响应一起发送的HTTP标头(请记住HTTP中的缓存为王)以及请求执行的时间长短。

答案 1 :(得分:1)

我理解你的问题的方式是,通过Web服务检索图像,这意味着图像被检索,在SOAP消息中被二进制化,通过线路发送,在客户端(在LINQ查询所在的地方)被解析。这总是很慢。发送的实际数据比实际图像BLOB大1.5到2.0倍。

以这种方式从数据库中获取巨大的BLOB始终是一场性能噩梦。如果需要查询它们(使用LINQ),请考虑仅查询元数据。获得所需的图像ID后,即可检索整个图像。

然而,它不会很快完美。为了获得更好的性能,每个检索到的图像都应该缓存在您的服务器上(在通过Web服务检索之后),并且不应该多次检索。这种类型的缓存应该可以轻松实现。或者,您不应将图像存储为BLOB,但现在在设计阶段可能为时已晚。

关于using的注意事项:只需将它用于实现IDisposable的任何变量。但并不是说这会导致你的性能下降。