如何在.NET中以编程方式测量当前进程的总内存消耗?

时间:2010-02-26 13:49:30

标签: c# .net performance memory memory-management

如何以编程方式在.NET中测量当前进程的总内存消耗量?

4 个答案:

答案 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)

答案 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;