垃圾收集器在foreach循环中太慢了?

Mig*_*oom 2 c# foreach garbage-collection

我有一个foreach循环,我用图像做一些操作.OutOfMemoryException当我用50多张图像运行这段代码时,我得到了一个; 因为图像实例各15 MB.

var files = Directory.GetFiles(path).ToList();

foreach (var file in files)
{
    Image image = new Bitmap(file);

    //Do some operations
}
Run Code Online (Sandbox Code Playgroud)

我删除了主要逻辑,因为这个小代码仍然存在这个问题.当我添加GC.Collect();foreach循环时,问题就消失了,我没有得到异常.

我的问题是:垃圾收集器是否太慢而无法在不调用Collect方法的情况下清理不再需要的图像,或者我是否遗漏了其他内容?

之前没有注意到这个问题.我从未想过会出现问题,因为//Do some operations每个图像需要约1秒.应该是我想的垃圾收集器的足够时间.

Rom*_*mbé 7

也许你应该合作using:

var files = Directory.GetFiles(path).ToList();

foreach (var file in files)
{
    using (Image image = new Bitmap(file))
    {
        // do work
    }
}
Run Code Online (Sandbox Code Playgroud)

这种方式Bitmap将在迭代后处理