gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 08:02:09 24 4
gpt4 key购买 nike

运行 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com