0
我有一个包含许多wpf控件的应用程序,但只有很少的应用程序可以在同一时间显示。 随着用户滚动槽项目,我们在每个视图模型的弱引用中“缓存”图像。即使我有足够的可用内存,如何阻止弱引用丢失
尽管工作集是260MB,并且有大量的RAM引用弱引用的可用对象被垃圾收集。进程作为x86运行。
GC有那么激烈的原因吗?
这是当然的解决方案,我们正在研究自定义缓存服务,但我对此行为感到惊讶。
我有一个包含许多wpf控件的应用程序,但只有很少的应用程序可以在同一时间显示。 随着用户滚动槽项目,我们在每个视图模型的弱引用中“缓存”图像。即使我有足够的可用内存,如何阻止弱引用丢失
尽管工作集是260MB,并且有大量的RAM引用弱引用的可用对象被垃圾收集。进程作为x86运行。
GC有那么激烈的原因吗?
这是当然的解决方案,我们正在研究自定义缓存服务,但我对此行为感到惊讶。
感谢Yuval的评论。我已经做出了一个答案,即使有足够的内存可用,也可以帮助别人认为弱引用可以用于缓存。
不幸的是,即使您的应用程序无法接近内存限制,弱引用也会被垃圾收集。似乎弱代码总是在第0代扫描时收集。
GC运行行为不确定。当第0代中的当前段满时,它将运行。你不能依靠它不运行,以保持你的弱引用活着。如果需要,请使用强大的参考缓存机制。 – 2014-09-26 10:52:59
另外考虑这一点 - 如果你在他们已经GC'ed时仍然需要你的引用可能表明这些不应该是一个弱引用,你可能想要有一些其他的方式来缓存它们。 – decPL 2014-09-26 10:55:40