2014-09-26 57 views
0

我有一个包含许多wpf控件的应用程序,但只有很少的应用程序可以在同一时间显示。 随着用户滚动槽项目,我们在每个视图模型的弱引用中“缓存”图像。即使我有足够的可用内存,如何阻止弱引用丢失

尽管工作集是260MB,并且有大量的RAM引用弱引用的可用对象被垃圾收集。进程作为x86运行。

GC有那么激烈的原因吗?

这是当然的解决方案,我们正在研究自定义缓存服务,但我对此行为感到惊讶。

+4

GC运行行为不确定。当第0代中的当前段满时,它将运行。你不能依靠它不运行,以保持你的弱引用活着。如果需要,请使用强大的参考缓存机制。 – 2014-09-26 10:52:59

+3

另外考虑这一点 - 如果你在他们已经GC'ed时仍然需要你的引用可能表明这些不应该是一个弱引用,你可能想要有一些其他的方式来缓存它们。 – decPL 2014-09-26 10:55:40

回答

0

感谢Yuval的评论。我已经做出了一个答案,即使有足够的内存可用,也可以帮助别人认为弱引用可以用于缓存。

不幸的是,即使您的应用程序无法接近内存限制,弱引用也会被垃圾收集。似乎弱代码总是在第0代扫描时收集。

相关问题