代码之家  ›  专栏  ›  技术社区  ›  jpsstavares

winforms ImageList内存问题

  •  1
  • jpsstavares  · 技术社区  · 15 年前

    ImageList 你猜对了,里面有很多图片。 Bitmap . 直到我把它们装进 图像列表 记忆的增长并不令人担忧。但是当它们被添加到 图像列表 天空火箭的内存使用。 但最大的问题是我必须重新加载图像列表。我试图对列表中的每个图像调用dispose,但内存没有释放。

            foreach (Image item in imageList.Images)
            {
                item.Dispose();
    
            }
            imageList.Images.Clear();
    
            GC.Collect();
    

    我做错什么了?

    1 回复  |  直到 15 年前
        1
  •  5
  •   Hans Passant    15 年前

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

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

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

    推荐文章