gpt4 book ai didi

c# - 如何检测内存泄漏在哪里?

转载 作者:可可西里 更新时间:2023-11-01 08:15:25 28 4
gpt4 key购买 nike

我有一个大型网站,似乎正在占用所有分配的内存。服务器上除此站点外没有其他任何内容。一周之内,它会耗尽 2 个演出并需要重新启动。目前这是使用 IIS 7 的服务器 2008 32 位。我们正在重新安装以使用 64 位并添加更多内存。如果能够追踪泄漏发生的位置,那就太好了。

那么跟踪内存泄漏的最佳实践是什么?

最佳答案

内存泄漏在 .NET 中并不常见,但当它们发生时,最常见的原因是未附加的事件处理程序。确保在监听器超出范围之前分离处理程序。

另一种选择是,如果您忘记在 IDisposable 资源上调用 Dispose()。这可能会阻止清理非托管资源(不由 GC 处理)。

还有一个可能的原因是死锁终结器。这将阻止收集终结器队列中的所有剩余对象。

我使用 WinDbg + Sos 来追踪泄漏。步骤如下

  • 倾倒垃圾堆并寻找嫌疑人
  • 使用 !gcroot 找出让嫌疑人活着的原因
  • 必要时重复

请注意,大量内存使用也可能是由于堆碎片造成的。常规堆被压缩,但固定对象会导致碎片。此外,LOH 未被压缩,因此 LOH 的碎片化并不少见。

这里有关于 WinDbg + sos 的优秀教程:http://blogs.msdn.com/tess/

关于c# - 如何检测内存泄漏在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1463711/

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