我有一个用图片填充的ImageList,你猜对了。这些图像作为Bitmap加载到数据集中的内存中。在我将它们加载到ImageList之前,内存的增长并不令人担忧。但是,当它们被添加到ImageList中时,内存使用量急剧上升。但最大的问题是当我必须重新加载图像列表时。我尝试在列表中的每个图像上调用dispose,但是内存没有被释放。这是我试图清理内存的代码:
foreach (Image item in imageList.Images)
{
item.Dispose();
}
imageList.Images.Clear();
GC.Collect();我做错了什么?
发布于 2010-10-12 22:31:00
您的处置代码不合适。迭代Images集合实际上会为每个图像创建一个新的位图。然后立即将其再次处理。只需调用Clear()即可。
GC.Collect()也不能有任何效果,ImageList类是原生窗口组件的包装器。它将图像存储在本机存储器中,而不是垃圾收集存储器中。
最后但并非最不重要的是你的真正问题: Windows内存管理器并不像你想的那样工作。当释放内存时,它不会缩小程序的虚拟内存大小。它只是将内存块标记为未使用,并将其添加到空闲块列表中。为以后重用做好了准备。只有在极少数情况下,释放的内存恰好跨越整个保留的内存页集合,它才能缩小虚拟内存大小。这不是一个真正的问题。它是虚拟的。
https://stackoverflow.com/questions/3915403
复制相似问题