[英]How can I determine what part of my application is leaking memory?
我已經實現了Dispose
...在所有支持它的地方。 我正在刪除所有事件處理程序。 我沒有在調用本機代碼。
我什至遍歷每個字典,並將值設置為null,然后在所有項目上調用.Clear()。
題:
如何找出我的代碼在哪里泄漏?
我首先通過在一夜之間進行測試發現了泄漏。 它使用固定數量的內存,因此它應該增長然后變得有些靜態。 然后,我像這樣使前台線程顯示內存:
if (key.KeyChar == 'g')
{
long pre = GC.GetTotalMemory(false);
long post = GC.GetTotalMemory(true);
Console.WriteLine("{2} Pre:{0} \tPost:{1}", pre, post, System.DateTime.Now);
GC.Collect();
}
我運行了幾次(超過幾個小時,不時按下“ g”),並且看到這個數字不斷增加。
追蹤問題的最佳方法是使用內存分析器...有很多選擇。
確保您使用
try
{
}
finally
{
youDisposableObject.Dispose();
}
要么
using (yourDisposableObject) {}
到您實施的每個對象“處置”
如果您對某些對象實施了終結器,則無需刪除它們
如果之后仍然無法修復,則必須使用內存分析器
我只是在我的C#應用程序中遇到了同樣的問題,並且使用了(實際上是試用版) dotTrace內存探查器 ,這非常有幫助。
定位泄漏發生的實際代碼行仍需要花費一些時間。 因此,不要指望該工具立即識別出罪魁禍首。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.