无法弄清楚进程的内存使用情况

时间:2015-01-03 21:29:01

标签: c#

我试图确保给定的代码块不会使用过多的内存。我在代码块之前和之后用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);
    }

1 个答案:

答案 0 :(得分:4)

在再次获取PeakWorkingSet64属性之前,您应该添加以下行:

p.Refresh();

原因如下所述:MSDN:

  

当Process组件与流程资源相关联时,   根据过程立即填充Process的属性值   相关流程的状态。如果有关的信息   相关过程随后发生变化,这些变化不是   反映在Process组件的缓存值中。过程   component是过程资源的快照   相关。要查看关联过程的当前值,   调用Refresh方法。

有关详细信息,请参阅this link