考慮下面的示例代碼:內存泄漏強類型的TableAdapter
Dim ta as new LogsTableAdapter
Dim lstLogs as new List(of LogsRow)
lstLogs.AddRange(ta.GetData.ToList)
ta.Dispose
ta = nothing
lstLogs.clear
lstLogs = nothing
GC.Collect
GC.WaitForFullGCComplete()
GC.Collect
在此之後代碼的執行,使用WinDbg的,我可以看到,所有的LogsRow的對象以及代表這些領域對象對象(字符串,整數小數等)仍然駐留在內存中。還有一個LogsDataTable駐留在內存中。
我知道ta.GetData()返回一個數據表。但是因爲我將它轉換爲一個列表,我將其添加到另一個列表中,似乎我的方法是將數據表及其所有行留在內存中。
此外,清除列表並將其歸零,似乎不會釋放列表及其中的對象佔用的資源。
那麼這裏究竟發生了什麼,以及如何釋放這些資源?
嘗試創建/配置。我認爲你需要不同的範圍才能讓GC完全清理那些東西。當前範圍在您的示例中仍處於活動狀態。我可能是可怕的錯誤,但... – TyCobb 2015-02-12 00:42:11
哦,很好的電話。這很可能是真的。 – Josh 2015-02-12 18:48:08