【发布时间】:2011-06-08 23:16:23
【问题描述】:
有什么方法可以在抛出 OutOfMemoryException 之前调用 GC.Collect()?
我想我正在寻找一种方法来执行以下代码流:
Try to Allocate Memory
On Pass Return
Call GC.Collect()
Try to Allocate Memory
On Fail Throw New OutOfMemoryException()
我正在编写一个缓存实现,目前我遇到了内存异常,所以目前我正在使用它来解决它:
If GC.GetTotalMemory(False) >= cache.CacheMemoryLimit + (100 * 1024 * 1024) Then
// When Total Memory exceeds CacheMemoryLimit + 100MB
GC.Collect()
End If
【问题讨论】:
-
如果您在创建新对象时内存不足,我认为运行时已经运行了垃圾回收。
-
@Simon 是的,通常抛出 OutOfMemoryException 是因为垃圾收集器无法为您的实例回收更多内存,这意味着静态引用或其他类型的内存泄漏。由于静态引用,类加载器特别容易泄漏。
标签: .net garbage-collection out-of-memory