考虑下面的示例代码:内存泄漏强类型的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