.net - 在抛出 OutOfMemoryException 之前调用 GC.Collect

标签 .net garbage-collection out-of-memory

有什么方法可以让 GC.Collect() 在抛出 OutOfMemoryException 之前被调用?

我想我正在寻找一种方法让它执行以下代码流:

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

最佳答案

也许我不理解您的问题,但您是否可以只捕捉到抛出的 OutOfMemoryException 并在那里调用 GC.Collect?将 try/catch 放入一个循环中,一直持续到您完成任务,并确保它能够 self 清理。

bool isFinished = false;
while (isFinished) {
  try {
    // do operations in here
  } catch (OutOfMemoryException oom) {
    GC.Collect();
  }

  // if you're done...
  isFinished = true;
}

请原谅使用 C# pseudo 而不是 VB,除非别无选择,否则我尽量不使用 VB。

关于.net - 在抛出 OutOfMemoryException 之前调用 GC.Collect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4688348/

相关文章:

Python 对于 1 的左移和 2 的幂的行为不同

c# - 如何在 C# 中服务器更新的文件的文本框中追加更新的行?

.net - Excel Interop条件格式

java - 在 Java 中检测低可用内存

android - 在 Android 中写入 ByteArrayOutputStream 时出现内存不足错误

java - Java 持续垃圾收集

c# - 我怎样才能输出足够精确的值来揭示 Debug 和 Release 之间的这种算术差异?

.net - SQL 查询中的转义字符

c# - 关于 .NET 中垃圾收集器的问题(内存泄漏)

java - GC 暂停 5 秒,但标记、扫描和压缩耗时不到 1 秒