I’m trying to measure, in a C# programm, the memory usage.
I’d like to know the C# equivalent of this Java function :
ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getCommitted()
that represent the total memory allocated for the heap. I need this to know the total size of memory allocated for my C# programm.
Then in Java I can get the used memory with :
ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getUsed()
Currently I use this in C# to get used memory :
Process_Memory = MyProcess.PrivateMemorySize64;
But I’m not totally sure that it’s the equivalent.
So in resume how can I get the total allocated space for my C# application and the current use at a time t?
EDIT :
From the answers and further research I’ve determine this :
Current memory in use
System.GC.GetTotalMemory(false);
Give the number of bytes currently allocated in managed memory. (http://msdn.microsoft.com/fr-fr/library/system.gc.gettotalmemory.aspx)
This method return a low value and I’m pretty sure it’s not really a representation of all memory in use as I can get with getUsed() in Java. In java for the same application used memory start at 5MB and go to 125MB max. With C# I get from 1 to 5 MB with above method.
It seems that :
MyProcess.PrivateMemorySize64; // return ~=25MB
or
MyProcess.WorkingSet64; //return ~=20MB
Give a more accurate value of all the memory in use. But I don’t know wich one I should use…
For the global allocated memory this article suggests to use :
Process_MemoryEnd1 = MyProcess.VirtualMemorySize64;
It return always the same value along the programm, about 169MB that seems fair compared to Java : from 64MB to 170MB max
I’m still looking for an accurate answer all I found is very vague and I’m not very familiar with Windows memory management, I’m not really sure to undertand the docs I found :/
The
GCstatic class provides all this type of information.Your probably after
GC.GetTotalMemory().EDIT:
I beleive that attempts to workout your memory footprint based on currently rooted objects.
IF you want the total size allocated for the process (i.e. including the free buffer) use the
Processclass. e.g.: