I am automating some profiling tasks and want to log heap space and generation sizes real-time. The profiling API seems awfully complicated for what I need, and it seems to
There are performance counters for a lot of this stuff and if you can't use Perfmon, you can access counters through the Diagnostics API.
Once I had to find a memory leak in a legacy code, I came accross this solution: Start "tasklist" with appropriate parameters as a process and read the output either from stream or from file.
e.g.
tasklist /fi "IMAGENAME eq notepad++.exe" /FO CSV /NH
Output is:
"notepad++.exe","7132","Console","1","21.004 K"
Not that elegant, but works in any programming language on Windows without additional dependences (C++/Qt in my case).
The term 'current memory usage' is a little loosely defined. Do you mean the working set? Whatever it means, you can use different properties such as VirtualMemorySize
, WorkingSet
, PrivateMemorySize
, etc. from the process class to retrieve it.
long workingSet = System.Diagnostics.Process.GetCurrentProcess().WorkingSet64;