【发布时间】:2012-06-19 06:33:30
【问题描述】:
我正在使用 System.Drawing 类处理图像列表。如果我在正常的 foreach 循环中处理图像,一切都很好,但是当我使用 Parallel.ForEach 遍历图像(图像我不是指任何一次性 System.Drawing.Image 实例,而是图像的源(url))时,我运行记不清。我的进程变得越来越大(> 1GB)。图形缓冲区似乎没有被释放,尽管我很注意释放所有资源。这可以通过切换到非并行 foreach(...) 来确认。该进程保持在大约 60 MB。
你遇到过这样的问题吗?
// memory "leak". process grows beyound 1GB to infinity
Parallel.ForEach(urls, url =>
{
ImageResizer.DownloadAndResizeImage(url);
});
// no memory "leak"
foreach (string url in urls)
{
ImageResizer.DownloadAndResizeImage(url);
}
【问题讨论】:
-
好吧,既然您已经向我们展示了no代码,您希望我们如何帮助您?
-
彻底阅读我的问题?我认为所有信息都在那里,但我会在我的问题中添加一些抽象代码,尽管我怀疑它是否会有所帮助。
-
大约有 110 亿种不同的方式来编写代码以顺序和并行方式与图像交互。其中有些会泄漏内存,有些会出现泄漏内存,有些则绝对不会。我们不知道你写了什么。尝试创建一个 short 但complete 示例来演示 问题,并将该代码添加到您的问题中。通常,在尝试构建此类示例的过程中,您会发现指向问题的新线索。
-
嗯...你好?问题是不是从 Parallel.Invoke 变成了 Parallel.ForEach??
-
Yes chagned form Parallel.Invoke to ForEach...我的错。对不起。
标签: c# memory-leaks task-parallel-library system.drawing