2009-01-20 18 views
26

Automatyzuję niektóre zadania profilowania i chcę logować przestrzeń sterty i rozmiary generowania w czasie rzeczywistym. profiling API wydaje się strasznie skomplikowany, jeśli chodzi o to, czego potrzebuję, i wydaje się, że słucha indywidualnych przydziałów i zbiorów, co nie jest dla mnie ważne. Narzędzia profilujące są oczywiście bardzo pomocne, ale szukałem bardziej elastycznego, programowalnego interfejsu.Czy istnieje sposób na odzyskanie bieżącego zużycia pamięci aplikacji C#?

Odpowiedz

39

Określenie "bieżące użycie pamięci" jest trochę luźno zdefiniowane. Masz na myśli zestaw roboczy? Cokolwiek to oznacza, możesz użyć różnych właściwości, takich jak VirtualMemorySize, WorkingSet, PrivateMemorySize itd. Z klasy procesowej, aby je odzyskać.

long workingSet = System.Diagnostics.Process.GetCurrentProcess().WorkingSet64; 
6

Istnieją liczniki wydajności dla wielu z tych rzeczy i jeśli nie możesz korzystać z Perfmon, możesz uzyskać dostęp do liczników za pomocą Diagnostycznego interfejsu API.

3

Raz musiałem znaleźć przeciek pamięci w starszych kod, przyszedłem po drugiej stronie tego rozwiązania: Start „Lista zgłoszeń” z odpowiednimi parametrami jako procesu i czytać albo wyjście ze strumienia lub z pliku.

np.

tasklist /fi "IMAGENAME eq notepad++.exe" /FO CSV /NH 

wyjściowa wynosi:

"notepad++.exe","7132","Console","1","21.004 K" 

Nie to eleganckie, ale działa w dowolnym języku programowania na Windows bez dodatkowych uzależnień (C++/Qt w moim przypadku).

Powiązane problemy