Reputation: 1168
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 listen in on individual allocations and collections, which isn't that important to me. Profiling tools are a great help of course, but I was looking for a more flexible, programmable interface.
Upvotes: 26
Views: 18924
Reputation: 7458
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).
Upvotes: 3
Reputation: 422172
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;
Upvotes: 39
Reputation: 116471
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.
Upvotes: 6