在高负载下加载许多图片时内存不足

时间:2015-08-22 00:02:01

标签: c# image out-of-memory

我是编程初学者和第一个“更难”的项目,我选择制作一个工具来搜索我的图片集中的双打。

我的第一个想法是使用哈希,所以我提出了这个:

var files = Directory.GetFiles("T:Obrazki", "*.jpg");
        foreach (var item in files)
        {
            var m = Image.FromFile(item);
            Console.WriteLine(m.GetHashCode());
        }

它启动得很好,然后给出System.OutOfMemoryException。

我尝试了很多东西,包括将循环分成2个for循环,但没有效果。接下来,我在网上找到了一条建议,将目标平台更改为x64,我做了什么,没有任何帮助。

我尝试的最后一件事是在循环的每次迭代中处理'm'并手动添加GC.Collect:

var files = Directory.GetFiles("T:Obrazki", "*.jpg");
        foreach (var item in files)
        {
            var m = Image.FromFile(item);
            Console.WriteLine(m.GetHashCode());
            m.Dispose();
            GC.Collect();
        }

它也不起作用。 它在+/- 180张图像后崩溃。 你有什么想法怎么做?

1 个答案:

答案 0 :(得分:0)

尝试从文件夹中的每个文件名创建System.Drawing.Bitmap个对象的集合,然后使用GetPixel(int x, int y)方法一次比较每两个对象,其中x和y是要检索的像素的坐标。这种方式可以帮助你找到双打。这篇小文章可能符合您的期望:

Image Comparison using C#

如果您正在处理多个图像文件,请考虑在使用后释放位图资源。