gpt4 book ai didi

c# - WeakReference 做一个好的缓存吗?

转载 作者:可可西里 更新时间:2023-11-01 07:51:56 34 4
gpt4 key购买 nike

我有一个缓存,它使用 Wea​​kReferences 来缓存对象,使它们在内存压力的情况下自动从缓存中删除。我的问题是缓存的对象在存储在缓存中后很快就会被收集。缓存在 64 位应用程序中运行,尽管仍有超过 4gig 的内存可用,但所有缓存的对象都会被收集(它们通常存储在此时的 G2 堆中)。如进程浏览器所示,没有手动引发的垃圾收集。

我可以应用什么方法使对象的生命周期更长一点?

最佳答案

使用 Wea​​kReferences 作为引用缓存对象的主要方式并不是一个好主意,因为正如 Josh 所说,您将受制于 WeakReference 和 GC 的任何 future 行为更改。

但是,如果您的缓存需要任何类型的复活功能,则对待清除的项目使用 Wea​​kReferences 会很有用。当一个项目满足驱逐标准时,您不是立即驱逐它,而是将其引用更改为弱引用。如果在 GC 之前有任何请求,您可以恢复其强引用,并且该对象可以再次存在。我发现这对一些缓存很有用,这些缓存很难预测命中率模式,并且频繁的“复活”是有益的。

如果您有可预测的命中率模式,那么我会放弃 WeakReference 选项并执行显式驱逐。

关于c# - WeakReference 做一个好的缓存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/930198/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com