2014-12-31 27 views
8

Próbuję uzyskać użycia pamięci mojej aplikacji, ale z jakiegoś powodu otrzymuję inny rozmiar niż w menedżerze zadańJak uzyskać wykorzystanie pamięci aplikacji, jak pokazano w Menedżerze zadań?

Używam:

enter image description here

Menedżer zadań pokazuje, że moja aplikacja zajmuje 45mb, podczas gdy ciągnąc go w moim kod dostaję 85mb jak mogę uzyskać taki sam rozmiar jak w Menedżerze zadań (bez użycia WMI)

+1

Dodaj 'process.Refresh()' przed wywołaniem 'process.PrivateMemorySize64' –

+0

nie pomogło, dostając te same wartości jak przed – atikot

+0

wersji Windows? – kennyzx

Odpowiedz

6

Prawdopodobnie patrzysz na niewłaściwą kolumnę w "Menedżer zadań" lub za pomocą niewłaściwa właściwość w Pr klasa ocess ..

Domyślam się, że szukasz WorkingSet64 nie PrivateMemorySize64. PrivateMemorySize64 to ilość pamięci wirtualnej przydzielonej do procesu, a nie pamięć fizyczna. W przypadku pamięci fizycznej użyj WorkingSet64.

Należy również zadzwonić pod numer process.Refresh() przed uzyskaniem dostępu do dowolnej właściwości dynamicznej w klasie procesowej, ponieważ jest mocno buforowana.

process.Refresh(); 
_data.MemoryUsed = (process.WorkingSet64).ConvertBytesToMegabytes().ToString(CultureInfo.InvariantCulture); 
+0

i dodano odśwież i prześlij kod podczas debugowania, ponieważ widzisz, że rozmiar pamięci jest inny, także nie ma drastycznych zmian w rozmiarze pamięci, który jest dość stabilny na 45-47mb ~ – atikot

+0

Nie sprawdzaj pamięci procesowej podczas debugowania. Uruchom proces z debuggera i sprawdź. Ponieważ podczas debugowania wizualnego studio uruchomi proces hostingu * YourProcess.vshost.exe *. To może powodować zamieszanie. Przetestowałem to, drukując wyjście w konsoli (skończyło się studio wizualne) i to działało idealnie. Zmień także "Sleep (200)" na "Sleep (1000)", aby zsynchronizować go z menedżerem zadań. –

+0

Próbuję bez Visual Studio i debugowania i nadal nie jest w porządku, nie widzę vshost w Menedżerze zadań również – atikot

0

Spróbuj raz z następującego kodu, może to pomoże

PerformanceCounter PC = new PerformanceCounter(); 
PC.CategoryName = "ServerProcess"; 
PC.CounterName = "Working Set - Private"; 
PC.InstanceName = JSP[0].ProcessName; //Process 
RAM_memorysize = PC.NextValue();   //float RAM_memorysize; 
PC.Close(); 
PC.Dispose();