如何在.NET中以编程方式测量当前进程的总内存消耗?
如何在.NET中以编程方式测量当前进程的总内存消耗?
参考这个SO问题
进一步尝试一下
Process currentProcess = System.Diagnostics.Process.GetCurrentProcess(); long totalBytesOfMemoryUsed = currentProcess.WorkingSet64;
如果你只想测量一些不同的操作引起的虚拟内存使用率的增加,你可以使用下面的模式:
GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); var before = System.Diagnostics.Process.GetCurrentProcess().VirtualMemorySize64; // performs operations here var after = System.Diagnostics.Process.GetCurrentProcess().VirtualMemorySize64;
当然,这是假设你的应用程序在上面的操作正在运行的时候不对其他线程执行操作。
您可以用您感兴趣的任何其他度量replaceVirtualMemorySize64
。查看System.Diagnostics.Process
types以查看可用的内容。
PerformanceCounter类 –
http://msdn.microsoft.com/en-us/library/system.diagnostics.performancecounter.aspx
有几个 –
http://msdn.microsoft.com/en-us/library/w8f5kw2e.aspx
这里是CLR内存计数器 –
我发现这非常有用:
Thread.MemoryBarrier(); var initialMemory = System.GC.GetTotalMemory(true); // body var somethingThatConsumesMemory = Enumerable.Range(0, 100000) .ToArray(); // end Thread.MemoryBarrier(); var finalMemory = System.GC.GetTotalMemory(true); var consumption = finalMemory - initialMemory;