我有一个包含许多图像控件的窗口(其中显示了一些高质量的图像)。
我在XAML中添加了这样的图像:
<Image Name="Image" Source="Images/myimage.png" HorizontalAlignment="Left" />
<Image Name="Image2" Source="Images/myimage2.png" HorizontalAlignment="Left" />
<Image Name="Image3" Source="Images/myimage3.png" HorizontalAlignment="Left" />
像这样…正如你所看到的,这里没有什么特别的。代码隐藏中没有任何代码。此窗口仅显示这些图像,不做任何其他操作。
因为我要显示很多高质量的图像,内存增加了大约200mb。
当我关闭这个窗口并打开另一个窗口(this.close())时,它不会释放内存。我等了一段时间,等垃圾回收器启动,但什么也没发生。我甚至尝试调用GC.collect(),但它不起作用。
为什么内存不释放?当我关闭此窗口时,是否有办法强制释放此内存?
我引用MSDN关于图像类的文档:
"大的图像文件会影响性能,因为它们加载到记忆"
表示应用程序将图像加载为应用程序资源。
当涉及到应用程序资源时,GC将不会收集它们,因为它们在技术上是"缓存"的,以便在应用程序中使用。(因此,以某种方式被引用)