【发布时间】:2015-02-11 23:59:19
【问题描述】:
考虑以下示例代码:
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 完全清理这些东西。当前范围在您的示例中仍然有效。不过,我可能是大错特错......
-
哦,好电话。这很可能是真的。
标签: vb.net visual-studio-2012 memory-leaks datatable .net-4.0