有人可以告诉我GC.GetTotalMemory(false)和。之间的区别 GC.GetTotalMemory(真);
我有一个小程序,当我比较第一个循环的结果时 给出一个put put<循环计数0 Diff = 32> for GC.GetTotalMemory(true); 和<循环计数0 Diff = 0> for GC.GetTotalMemory(false); 但不应该是其他的吗?
Smilarly其余的循环打印出一些数字,这两种情况都不同。这个数字表示什么。为什么它会随着循环的增加而改变。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
namespace test
{
struct Address
{
public string Street;
}
class Details
{
public string Name ;
public Address address = new Address();
}
class emp :IDisposable
{
public Details objb = new Details();
bool disposed = false;
#region IDisposable Members
public void Dispose()
{
Disposing(true);
}
void Disposing(bool disposing)
{
if (!disposed)
disposed = disposing;
objb = null;
GC.SuppressFinalize(this);
}
#endregion
}
class Program
{
static void Main(string[] args)
{
long size1 = GC.GetTotalMemory(false);
emp empobj = null;
for (int i = 0; i < 200;i++ )
{
// using (empobj = new emp()) //------- (1)
{
empobj = new emp(); //------- (2)
empobj.objb.Name = "ssssssssssssssssss";
empobj.objb.address.Street = "asdfasdfasdfasdf";
}
long size2 = GC.GetTotalMemory(false);
Console.WriteLine( "loop count " +i + " Diff = " +(size2-size1));
}
}
}
}
答案 0 :(得分:5)
该参数定义是否等到完整垃圾收集在运行之前发生。
请参阅MSDN: 参数
<强> forceFullCollection 强>
类型:System.Boolean
如果为true,则表示此方法可以在返回之前等待垃圾收集;否则,错误。
diff仍为0的原因可能是因为即使你传递了错误,GC也已经发生了。
答案 1 :(得分:1)
在任何一种情况下,GC.GetTotalMemory()
都是一个估计,所以你真的不应该担心32字节的差异......