【发布时间】:2019-11-14 05:22:51
【问题描述】:
我有一个字节数组列表。而且,我正在使用它通过内存流生成位图图像。
在保存图像时,内存使用率非常高。在某些时候,它会导致内存不足异常。
我试图注释掉保存文件,看看是否会导致这个问题。或者,手动调用 GC。没有任何改变,仍然使用高内存。我最新的代码是这样的:
List<byte[]> byteArrayList = helper.GetArrayList(); // Gets approximately 10k items.
for (int i = 0; i < byteArrayList.Count; i++)
{
using (MemoryStream ms = new MemoryStream(byteArrayList[i]))
{
using (Bitmap bm = new Bitmap(ms))
{
bm.Save(fileLocation);
bm.Dispose();
}
ms.Dispose();
}
byteArrayList[i] = null;
byteArrayList.Remove(byteArrayList[i]);
}
byteArrayList.Dispose();
我该如何解决这个问题?
【问题讨论】:
-
请注意,如果
Dispose已经在using语句中,则不需要显式调用。将列表元素设置为 null 是毫无意义的,我个人不会为 Remove 调用而烦恼。 (byteArrayList.Dispose()甚至可以编译吗?) -
使用 BufferManager wintellect.com/pooling-buffers-for-better-memory-management
-
为什么要标记 WPF? Bitmap 是一个 WinForms 类。
-
显然您的字节数组已经包含编码位图帧。为什么不直接打电话给
File.WriteAllBytes? -
@YSFKBDY,提交队列版本作为答案。
标签: c# wpf memory-leaks out-of-memory heap-memory