我正在处理图像处理项目,在我的应用程序中,我正在处理来自文件夹的图像(我在 while 循环中处理图像),文件夹包含 1000 多个图像。我正在使用垃圾收集(GC.Collect() ) 每 4 个图像计数。在处理了1000张图像后OutOfMemoryException
(当位图图像分配给图片框时会出现异常),如何解决这个问题?
问问题
774 次
3 回答
1
都没有。在不做坏事的情况下获得这些例外是完全可以的。大堆碎片化仍然是一个未解决的问题。
您最好的机会是打开一个单独的进程来处理图像,直到它在您的主应用程序的控制下用完(然后重新启动它),和/或移动到 64 位(更大的空间使得碎片问题不太可能出现)。
当位图图像分配给图片框时,异常将通过
这需要一大块内存。告诉我们这些图像?它们有多大?为什么是picturebox(批处理通常不需要看图像)。无论如何,这是一个已定义的问题,如果图像很大,这是可以预料的。
于 2012-02-09T06:56:32.177 回答
0
这取决于您如何使用图像。您可能没有处理相关实例。尝试将您的实例包装在 using 语句中:
using (var image = ...new instance created...)
{
// ...do stuff...
}
于 2012-02-09T06:40:55.490 回答
0
寻找内存泄漏。您可以将 WinDbg 与 gcroot 命令一起使用。请参阅下面的链接。
你需要调查嫌疑人。您可以使用 SOS 调试扩展。以下命令将为您提供内存中类的实例列表及其地址:
!DumpHeap -type LeakingClass
然后使用地址调用 GCRoot 并查看将对象固定在内存中的内容:
!GCRoot <your address here>
您可以从 DumpHeap 命令的结果中复制粘贴地址。
于 2012-02-09T06:41:56.020 回答