winforms ImageList的内存问题

时间:2010-10-12 13:48:55

标签: winforms memory-management imagelist

我有一个ImageList,其中包含了你猜对了的图片。 这些图像作为Bitmap加载到数据集的内存中。直到我把它们加载到ImageList中,记忆的兴起并不担心。但是当他们被添加到ImageList内存使用天空火箭时。 但最大的问题是我必须重新加载图像列表。我试图在列表中的每个图像上调用dispose但是内存没有被释放。 这是我试图清理内存的代码:

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

        }
        imageList.Images.Clear();

        GC.Collect();

我做错了什么?

1 个答案:

答案 0 :(得分:5)

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

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

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