我有一个像缓存一样的对象。如果需要,它可以填满整个可用内存。
我希望能够根据需要将内存恢复到操作系统。因此,如果任何其他分配出现问题,VM(或GC或其他任何人)应该在使用OutOfMemory异常失败之前让我的'缓存'缩小。
我怎样才能在C#中做到?
答案 0 :(得分:9)
我建议你使用built-in Cache而不是重新发明轮子。它会自动处理这样的情况:如果内存开始变低,它将根据优先级使项目到期。它也非常易于扩展,您可以轻松地将其分发给热门的提供商,例如memcached。
请注意,System.Runtime.Caching
仅适用于.NET 4.0。早期版本中提供了其他缓存,例如Enterprise library,System.Web.Caching,Velocity,...
答案 1 :(得分:0)
可配置的最大缓存大小如何;当您的缓存达到最大值时,您将从中删除最旧的项目。 max应该用对缓存有意义的术语来定义,例如,缓存中的最大项目,最大内存使用等。
答案 2 :(得分:0)
非常有趣的问题。你试过玩WeakReferences吗?看起来这正是你所需要的。
答案 3 :(得分:0)
我建议将对象保留在缓存中一段时间,并使用内置缓存。