1

我有一个ImageList填充了,你猜对了,图像。这些图像以Bitmap. 直到我把它们加载到ImageList内存中的兴起是不担心的。但是当它们被添加到ImageList内存使用量时,就会飞速发展。但最大的问题是当我必须重新加载图像列表时。我试图在列表中的每个图像上调用 dispose 但内存没有被释放。这是我试图清理内存的代码:

        foreach (Image item in imageList.Images)
        {
            item.Dispose();

        }
        imageList.Images.Clear();

        GC.Collect();

我究竟做错了什么?

4

1 回答 1

5

您的处置代码不合适。迭代 Images 集合实际上为每个图像创建了一个新的位图。然后您立即再次处理。只需调用 Clear()。

GC.Collect() 也没有任何效果,ImageList 类是原生 Windows 组件的包装器。它将图像存储在本机内存中,而不是垃圾收集的内存中。

最后但并非最不重要的是您的真正问题:Windows 内存管理器无法按照您的想法工作。它在释放内存时不会缩小程序的虚拟内存大小。它只是将内存块标记为未使用并将其添加到空闲块列表中。准备在以后重新使用。只有在释放的内存恰好跨越整个保留内存页集的极少数情况下,它才能缩小虚拟内存大小。这不是一个真正的问题。是虚拟的。

于 2010-10-12T14:31:00.187 回答