我正在开发一个MDI样式winforms应用程序,它将图像作为文档加载。一个文档可以容纳许多存储为Bitmap实例的图像。我发现当我关闭其中一个文件时,GC没有恢复内存。因此,如果我打开和关闭文档几次,内存会增加很多。特别是当我的应用程序将图像存储为每通道16位时,因此图像非常大。打开关闭文档几次后,它实际上会耗尽内存。
起初我以为我有内存泄漏,但事实证明,当我关闭文档时,如果我调用GC.Collect,则内存被正确收集,我的问题就消失了。
我是否正确地认为如果GC.Collect释放内存,那意味着我没有泄漏?并且有没有理由为什么GC不是自己做这个?有没有在这种情况下不明确使用GC.Collect的原因?
答案 0 :(得分:0)
需要大量空间的物体(我不记得究竟多少)在第一代而不是第零代保存。这就是为什么他们将在相当长的一段时间内保持未收集状态,因为GC不会经常收集第一代对象。除非你强迫它。