.net GC.GetTotalMemory(false)和GC.GetTotalMemory(true)之间的区别是什么
有人能告诉我GC.GetTotalMemory(false)和 GC.GetTotalMemory(真) 我有一个小程序,当我比较第一个循环的结果时 给出GC.GetTotalMemory的put.net GC.GetTotalMemory(false)和GC.GetTotalMemory(true)之间的区别是什么,.net,.net,有人能告诉我GC.GetTotalMemory(false)和 GC.GetTotalMemory(真) 我有一个小程序,当我比较第一个循环的结果时 给出GC.GetTotalMemory的put(true); GC.GetTotalMemory的(false); 但这不应该是另一种方式吗 其余的循环笑眯眯地打印一些数字,这两种情况下都是不同的。这个数字表示什么?为什么它会随着循环的增加而变化 using System; using System.Collections.Generic; us
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));
}
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用系统诊断;
名称空间测试
{
结构地址
{
公众街;;
}
课程详情
{
公共字符串名称;
公共地址=新地址();
}
emp类:IDisposable
{
公共详细信息objb=新详细信息();
布尔=假;
#区域IDisposable成员
公共空间处置()
{
处置(真实);
}
无效处置(bool处置)
{
如果(!已处置)
处置=处置;
objb=null;
总干事(本);
}
#端区
}
班级计划
{
静态void Main(字符串[]参数)
{
long size1=GC.GetTotalMemory(false);
emp empobj=null;
对于(int i=0;i<200;i++)
{
//使用(empobj=new emp())/--(1)
{
empobj=新的emp();/-------(2)
empobj.objb.Name=“ssssss”;
empobj.objb.address.Street=“asdfasdfasdfasdf”;
}
long size2=GC.GetTotalMemory(false);
Console.WriteLine(“循环计数”+i+“差异=”+(size2-size1));
}
}
}
}
该参数定义在运行之前是否等待完全垃圾收集
见:
参数
强制收集类型:System.Boolean
true表示此方法可以在返回之前等待垃圾回收;否则,错误
diff仍然为0的原因可能是因为即使传递false,GC也已经发生了。在这两种情况下,
GC.GetTotalMemory()
是一个估计值,所以您真的不应该担心32字节的差异…在这种情况下,当我传递true时,我希望得到diff=0,因为方法等待垃圾收集。但是当我传递false时,我得到了diff=0,这让我很困惑,只是在这里加上,如果在这里传递一个真值,那么会有显著的性能差异。我在一个循环中执行了一个检查,而true参数导致了显著的性能差异(我显然应该预料到这一点),为该参数传递一个false值是一个非常便宜的操作,并且在性能上与没有内存检查几乎没有任何差异。