处理内存不足的情况

时间:2011-01-04 10:19:49

标签: c#

我有一个像缓存一样的对象。如果需要,它可以填满整个可用内存。

我希望能够根据需要将内存恢复到操作系统。因此,如果任何其他分配出现问题,VM(或GC或其他任何人)应该在使用OutOfMemory异常失败之前让我的'缓存'缩小。

我怎样才能在C#中做到?

4 个答案:

答案 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)

我建议将对象保留在缓存中一段时间​​,并使用内置缓存。