【问题标题】:Image retrieval optimisation with LINQ使用 LINQ 优化图像检索
【发布时间】:2011-03-21 11:38:06
【问题描述】:

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

大概的图片大小是 4000 * 1000 像素,重约 400-600KB。

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

第一个图像在大约 0.7 到 1.5 秒内被检索到,而随后的图像需要 3 到 4 秒。

从数据库读取图像的代码没有包含在using { } 中,我正在努力了解如何将此子句与仅返回字节数组的方法一起使用。

这里有什么方法可以提高性能吗?

谢谢

编辑:一旦我得到结果,我将运行分析并发布代码。谢谢

【问题讨论】:

  • 您能否发布图像读取过程的来源,以便我们提出改进建议?

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


【解决方案1】:

按照我理解您的问题的方式,图像是通过 Web 服务检索的,这意味着图像被检索,在 SOAP 消息中进行二进制处理,通过网络发送,在客户端(您的 LINQ 查询所在的位置)未进行二进制处理.这总是很慢。实际发送的数据比实际图像 BLOB 大 1.5 到 2.0 倍。

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

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

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

【讨论】:

  • 谢谢。将运行分析并回复您。我应该更改方法以返回图像的引用而不是按值执行吗?
  • @vikp:如果引用是指 C# 引用,那么这取决于:Web 服务必须向您发送数据并且不能使用引用(不应该)。在您的代码中,您应该传递包含数据的对象,而不是字节数组(将被复制而您不希望这样)。
【解决方案2】:

没有实际的源代码很难说什么。更糟糕的是, 所说的代码很难说出任何明智的话:程序员非常不善于凭经验找到瓶颈。您需要的是一个不错的服务器端性能分析器(例如dotTrace)和客户端HTTP 分析器(例如Fiddler)。

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

客户端分析器将向您显示随响应发送的 HTTP 标头(请记住,HTTP 中的缓存是王道)以及通常执行请求的时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    相关资源
    最近更新 更多