我试图确保给定的代码块不会使用过多的内存。我在代码块之前和之后用PeakWorkingSet64()读取当前使用的内存。但报道的价值是一样的。有什么问题?
private static void memTest()
{
Process p = Process.GetCurrentProcess();
long memBefore = p.PeakWorkingSet64 / 1000;
List<string> l = new List<string>();
int cnt = 0;
try { while (true) { l.Add("Hello World"); cnt++; } }
catch { }
long memAfter = p.PeakWorkingSet64 / 1000;
Console.WriteLine("memBefore={0} memAfter={1} cnt={2}", memBefore, memAfter, cnt);
}
答案 0 :(得分:4)
在再次获取PeakWorkingSet64属性之前,您应该添加以下行:
p.Refresh();
原因如下所述:MSDN:
当Process组件与流程资源相关联时, 根据过程立即填充Process的属性值 相关流程的状态。如果有关的信息 相关过程随后发生变化,这些变化不是 反映在Process组件的缓存值中。过程 component是过程资源的快照 相关。要查看关联过程的当前值, 调用Refresh方法。
有关详细信息,请参阅this link。