我想知道为什么在创建一个非常简单的DataTable然后将其设置为null后,垃圾收集不会清除该DataTable使用的所有内存.这是一个例子.变量Before应该等于Removed但它不是.
{
long Before = 0, After = 0, Removed = 0, Collected = 0;
Before = GC.GetTotalMemory(true);
DataTable dt = GetSomeDataTableFromSql();
After = GC.GetTotalMemory(true);
dt = null;
Removed = GC.GetTotalMemory(true);
GC.Collect();
Collected = GC.GetTotalMemory(true);
}
Run Code Online (Sandbox Code Playgroud)
给出以下结果.
Before = 388116
After = 731248
Removed = 530176
Collected = 530176
Run Code Online (Sandbox Code Playgroud)