在高负载加载许多图片时内存不足
本文关键字:许多图 内存不足 加载 高负载 负载 | 更新日期: 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是要检索的像素的坐标。这种方法可以帮你找到替身。这篇小文章可能符合你的期望:
如果您正在处理多个图像文件,请考虑在使用后释放位图资源。