如何以编程方式在.NET中测量当前进程的总内存消耗量?
答案 0 :(得分:51)
请参阅此SO question
进一步尝试这个
Process currentProcess = System.Diagnostics.Process.GetCurrentProcess();
long totalBytesOfMemoryUsed = currentProcess.WorkingSet64;
答案 1 :(得分:31)
如果您只想测量由某些不同操作引起的虚拟内存使用量的增加,您可以使用以下模式: -
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
var before = System.Diagnostics.Process.GetCurrentProcess().VirtualMemorySize64;
// performs operations here
var after = System.Diagnostics.Process.GetCurrentProcess().VirtualMemorySize64;
当然,这是假设您的应用程序在上述操作正在运行时未在其他线程上执行操作。
您可以将VirtualMemorySize64
替换为您感兴趣的其他指标。请查看System.Diagnostics.Process
类型以查看可用的内容。
答案 2 :(得分:3)
PerformanceCounter类 -
http://msdn.microsoft.com/en-us/library/system.diagnostics.performancecounter.aspx
其中有几个 -
http://msdn.microsoft.com/en-us/library/w8f5kw2e.aspx
这是CLR内存计数器 -
答案 3 :(得分:2)
我发现这非常有用:
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;