我有一个ImageList
填充,你猜对了,图像.这些图像作为数据集加载到数据集的内存中Bitmap
.直到我把它们装进ImageList
内存的崛起并不担心.但是当它们被添加到ImageList
内存使用天空火箭时.但最大的问题是我必须重新加载图像列表.我试图在列表中的每个图像上调用dispose但是内存没有被释放.这是我试图清理内存的代码:
foreach (Image item in imageList.Images) { item.Dispose(); } imageList.Images.Clear(); GC.Collect();
我究竟做错了什么?
您的处理代码不合适.迭代Images集合实际上为每个图像创建了一个新的位图.然后你再次立即处置.只需调用Clear()即可.
GC.Collect()也没有任何影响,ImageList类是本机Windows组件的包装器.它将图像存储在本机内存中,而不是垃圾收集内存.
最后但并非最不重要的是你的真正问题:Windows内存管理器并不像你想象的那样工作.它释放内存时不会缩小程序的虚拟内存大小.它只是将内存块标记为未使用,并将其添加到空闲块列表中.准备好以后再使用.只有在极少数情况下,释放的内存恰好跨越整个保留内存页面集,才能缩小虚拟内存大小.这不是一个真正的问题.这是虚拟的.