memory-leaks - 我有很多未使用的内存分配给 .net

标签 memory-leaks memory-management out-of-memory red-gate-ants

运行 ANTS 内存分析器我看到我有很多未使用的内存分配给 .net。

我如何确定造成这种情况的原因?

我把ANTS生成的总结报告截图放在这里:ANTS Summary report

谢谢 托马斯

最佳答案

当我并行运行大约 20 个 Selenium 测试时,我遇到了同样的问题。在分析了这个问题之后,我缩小了它的范围,这可能是由于一个特定的方法分配了大量内存,而 GC 可能没有及时清理它以进行并行调用,所以正如问题下的讨论所建议的那样,我想它创造了一个瑞士奶酪.

我首先添加了这段代码来按照此处的建议分析这个问题 https://www.codeguru.com/dotnet/memory-leaks-dot-net/

GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();

果然分配给 .Net 的未使用内存从 500MB 减少到 50MB

但是这段代码是不可取的,因为它会导致死锁,所以我的解决方案是在方法的开头获取分配的字节,然后在结束时提醒 GC 关于该方法调用期间分配的字节。结果我看到内存消耗慢慢减少到 50MB

public async Task<IActionResult>  MemoryConsumingMethod()
{
   var allocatedBytesStart = GC.GetTotalAllocatedBytes();
   ...
   //main content
   var model = MyViewModel(){...}
   ...
   var allocatedBytesEnd = GC.GetTotalAllocatedBytes();
   GC.AddMemoryPressure(allocatedBytesEnd - allocatedBytesStart);

   return View(model);
}

关于memory-leaks - 我有很多未使用的内存分配给 .net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9026176/

相关文章:

javascript - 如何处理 jqPlot 内存泄漏?

iphone - tableviewDataSource 中的内存管理

iphone - 何时释放整个类中使用的对象?

使用 matplotlib 的内存泄漏

memory-leaks - Xamarin.Forms 样式导致 WeakReference 泄漏

asp.net - CaliEventHandlerDelegateProxy 泄漏

mysql - 在非常大的表上使用 Count 进行分组

c++ - 是否需要使用new关键字创建容器(集合, vector 等),以便在函数之间持久存在?

java - Android:启动抽屉布局时出现内存不足错误

java - 模拟器崩溃,java.lang.OutOfMemoryError