【发布时间】:2011-01-09 12:34:50
【问题描述】:
在我的 Windows 服务中密集使用 system.drawing 时出现内存不足异常。
这是我的代码的一部分:
FileStream fs = new FileStream(ImagePath, FileMode.Open, FileAccess.Read);
img = (Image)Image.FromStream(fs).Clone();
该异常不仅在这一点上提出,有时在涉及绘图、裁剪、调整大小、图像复制的其他点上也提出
我总是处理所有使用过的对象。
我在system.drawing中看到了这篇关于“Out of memory exception”的文章 here
虽然它与我的情况非常相似,但不同的是,因为我的测试数据是 40 张图像的重复链,所以如果其中一张出现问题,它应该从第一个周期开始很快出现。
我看到here提到的限制
它说我们不应该在 Win/Web 服务上使用 system.drawing。
好的,我需要将它与 Windows 服务一起使用来处理大量图像,如果有的话,还有什么替代方案?
【问题讨论】:
-
我编写了一个使用 System.Drawing 没有任何问题的 Windows 服务。建议禁止的原因是仅当您绘制到桌面时......换句话说,Windows 服务不应该尝试绘制到屏幕上,因为 Windows 服务不一定有登录用户,因此没有要绘制到的桌面。
-
事实上,MSDN 中解释说您“可以”在 Windows 服务中使用 system.drawing,但它们不保证其行为。 forums.asp.net/t/1125885.aspx我的服务运行了几个小时没有问题,处理了几千张图像,但随后发生了这个异常。
标签: graphics memory-management windows-services drawing system.drawing