Boo*_*one 13 .net c# memory-leaks
我有一个大型网站似乎正在吸收正在分配的所有内存.此站点旁边的服务器上没有其他任何内容.在一周内,它会吃掉2场演出并需要重新启动.目前这是使用IIS 7的服务器2008 32位.我们重新安装使用64位并添加更多内存.能够追踪泄漏发生的位置会很好.
那么跟踪内存泄漏的最佳做法是什么?
Bri*_*sen 14
.NET中的内存泄漏并不常见,但是当它们发生时,最常见的原因是未连接的事件处理程序.在侦听器超出范围之前,请确保分离处理程序.
另一种选择是,如果你忘记调用Dispose()上IDisposable的资源.这可能会阻止清理非托管资源(不由GC处理).
而另一个可能的原因是一个僵局的终结者.这将阻止收集终结器队列中的所有剩余对象.
我使用WinDbg + Sos来追踪泄漏.步骤如下
!gcroot找出什么让犯罪嫌疑人还活着请注意,大量内存使用也可能是由于堆碎片造成的.常规堆是压缩的,但固定的对象可能会导致碎片.此外,LOH没有压实,因此LOH的碎片并不少见.
关于WinDbg + sos的优秀教程:http://blogs.msdn.com/tess/