首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >winforms ImageList的内存问题

winforms ImageList的内存问题
EN

Stack Overflow用户
提问于 2010-10-12 21:48:55
回答 1查看 1.2K关注 0票数 1

我有一个用图片填充的ImageList,你猜对了。这些图像作为Bitmap加载到数据集中的内存中。在我将它们加载到ImageList之前,内存的增长并不令人担忧。但是,当它们被添加到ImageList中时,内存使用量急剧上升。但最大的问题是当我必须重新加载图像列表时。我尝试在列表中的每个图像上调用dispose,但是内存没有被释放。这是我试图清理内存的代码:

代码语言:javascript
复制
        foreach (Image item in imageList.Images)
        {
            item.Dispose();

        }
        imageList.Images.Clear();

        GC.Collect();

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-10-12 22:31:00

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

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

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3915403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档