我熟悉WeakReference
,但我正在寻找一个已清除的引用类型only当内存不足时,不仅仅是每次运行 gc 时(就像 Java 的SoftReference
)。我正在寻找一种实现内存敏感缓存的方法。
ASP.NET 缓存为您提供了所需的内存敏感行为,但缺点是所有内容都需要唯一的键。但是,您应该能够保存对放置在 ASP.NET 缓存中的对象的 WeakReference。缓存的强引用将阻止 GC,直到缓存决定需要清理它以释放内存。 WeakReference 使您可以访问对象,而无需使用缓存键进行查找。
Foo cachedData = new Foo();
WeakReference weakRef = new WeakReference( cachedData );
HttpRuntime.Cache[Guid.NewGuid().ToString()] = cachedData;
...
if ( weakRef.IsAlive )
{
Foo strongRef = weakRef.Target as Foo;
}
您可以通过沿着以下方式扩展 WeakReference 来创建 SoftReference 类
class SoftReference : WeakReference
{
public SoftReference( object target ) : base( target )
{
HttpRuntime.Cache[Guid.NewGuid().ToString()] = target;
}
}
您还需要重写 Target 上的 setter,以确保任何新目标都进入缓存。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)