Reputation: 90573
How to measure the total memory consumption of the current process programmatically in .NET?
Upvotes: 72
Views: 73406
Reputation: 29956
If you only want to measure the increase in say, virtual memory usage, caused by some distinct operations you can use the following pattern:-
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
var before = System.Diagnostics.Process.GetCurrentProcess().VirtualMemorySize64;
// performs operations here
var after = System.Diagnostics.Process.GetCurrentProcess().VirtualMemorySize64;
This is, of course, assuming that your application in not performing operations on other threads whilst the above operations are running.
You can replace VirtualMemorySize64
with whatever other metric you are interested in. Have a look at the System.Diagnostics.Process
type to see what is available.
Upvotes: 44
Reputation: 90573
I have found this very useful:
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;
Upvotes: -1
Reputation: 5778
Refer to this SO question
Further try this
Process currentProcess = System.Diagnostics.Process.GetCurrentProcess();
long totalBytesOfMemoryUsed = currentProcess.WorkingSet64;
Upvotes: 69
Reputation: 7326
PerformanceCounter class -
http://msdn.microsoft.com/en-us/library/system.diagnostics.performancecounter.aspx
There are several of them -
http://msdn.microsoft.com/en-us/library/w8f5kw2e.aspx
Here is the CLR memory counter -
http://msdn.microsoft.com/en-us/library/x2tyfybc.aspx
Upvotes: 4