C# Can';无法计算进程的内存使用情况

C# Can';无法计算进程的内存使用情况,c#,C#,我试图确保给定的代码块不会使用过多的内存。在代码块之前和之后,我使用PeakWorkingSet64()读取当前使用的内存。但报告的值是相同的。怎么了 private static void memTest() { Process p = Process.GetCurrentProcess(); long memBefore = p.PeakWorkingSet64 / 1000; List<string> l = ne

我试图确保给定的代码块不会使用过多的内存。在代码块之前和之后,我使用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);
    }
private static void memTest()
{
进程p=Process.GetCurrentProcess();
long memBefore=p.PeakWorkingSet64/1000;
列表l=新列表();
int-cnt=0;
试试{while(true){l.Add(“helloworld”);cnt++;}
捕获{}
long memAfter=p.PeakWorkingSet64/1000;
WriteLine(“memBefore={0}memAfter={1}cnt={2}”,memBefore,memAfter,cnt);
}

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

p.Refresh();
原因由MSDN描述如下:

当流程组件与流程资源关联时 进程的属性值立即根据 关联进程的状态。如果有关 关联的流程随后会发生更改,但这些更改不会发生 反映在流程组件的缓存值中。过程 组件是流程资源创建时的快照 相关。要查看关联进程的当前值, 调用刷新方法


有关更多详细信息,请参阅。

我认为您需要重新获取新统计数据的当前进程。在进程中执行此操作,您的检查将显示结果,因为进程对象有很多开销。理想情况下,您应该使用另一个流程监控您的流程。RedGate为此制作了一个工具,它可能会有一个试用版,Ants内存分析器。另外,看看MSDN上是否有任何内容可以帮助您完成此页,