【发布时间】:2011-03-13 00:48:24
【问题描述】:
我有一个使用 .NET 3.5 SP1 编写的应用程序,它从外部站点下载图像并将它们显示给最终用户。在极少数情况下,我的用户会遇到 OutOfMemory 错误,因为他们正在下载大量图像。有时与这些图像相关的原始数据很大,但更多时候,图像的尺寸很大。我意识到我可能永远无法解决这些 OOM 错误是针对特定图像引发的事实。但是,如果我能在尝试加载图像之前以某种方式确定加载特定图像是否会导致 OOM 问题,那将非常有帮助。
图像的数据被加载到一个 Stream 中,然后通过调用 System.Drawing.Image.FromStream(stream) 将图像本身转换为 System.Drawing.Image。我没有先将这些图像存储在磁盘上的选项。它们必须通过内存加载。
如果有人有任何提示或建议可以让我检测到加载图像会导致 OOM 异常,我将非常感激。
【问题讨论】:
-
“图像的数据被加载到流中”... 是魔法,还是如何?
-
@Will - “从外部站点下载图像”
-
@Joel 所以他得到一个流,然后将该流馈送到内存流中,然后将该流与图像一起使用?他想知道为什么他的内存不足?为什么不直接使用原始流并去掉中间人?我是疯子吗?
-
@Will - 这太疯狂了,但基思没有说“内存流”。我的印象是他将来自 HTTP 请求的流直接提供给 Image.FromStream 方法。
-
@Joel 我知道,但在这些地方,像这样疯狂的事情是正常的。他所说的“将图像的数据加载到流中”的方式是一种奇怪的说法,即“我通过 HTTP 响应流获取图像”。
标签: .net gdi out-of-memory