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

本文关键字:许多图 内存不足 加载 高负载 负载 | 更新日期: 2023-09-27 18:09:15

我是一个编程初学者,对于第一个"更难"的项目,我选择制作一个工具来搜索我的图片集中的double。

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

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。收集:

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个图像后崩溃。你知道怎么做吗?

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

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

使用c#进行图像比较

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