2015-04-01 17 views
13

Ok, więc używam WMI (.net/C#), aby stale zbierać dane o określonym procesie uruchomionym na komputerze. Dostaję dane przez klasę Win32_PerfFormattedData_PerfProc_Process. Że klasa ma wiele właściwości, ale ci, że jesteśmy zainteresowani są następujące:Jak obliczyć użycie pamięci w Menedżerze zadań?

uint64 PageFileBytes; 

wartość w bajtach, że proces ten został użyty w pliku (ów) stronicowania. Pliki stronicowania przechowują strony pamięci używane przez proces, które nie są zawarte w innych plikach. Pliki stronicowania są wspólne dla wszystkich procesów, a brak miejsca w plikach stronicowania może uniemożliwić innym procesom przydzielanie pamięci.

uint32 PoolNonpagedBytes; 

wartość w bajtach w puli niestronicowanej, obszar pamięci systemowej (pamięci fizycznej wykorzystywane przez system operacyjny) dla obiektów, które nie mogą być zapisywane na dysku, ale musi pozostać w pamięci fizycznej, o ile są przydzielane. PulaNonpagedBytes w Win32_PerfFormattedData_PerfOS_Memory jest obliczana inaczej niż właściwość PoolPagedBytes w Win32_PerfFormattedData_PerfProc_Process, więc może nie być równa sumie PoolPagedBytes dla wszystkich wystąpień Win32_PerfFormattedData_PerfProc_Process. Ta właściwość wyświetla tylko ostatnią obserwowaną wartość; to nie jest średnia.

uint32 PoolPagedBytes; 

wartość w bajtach w puli stronicowanej, obszar pamięci systemowej (pamięci fizycznej używanej przez system operacyjny) dla obiektów, które mogą być zapisywane na dysku, gdy nie są one używane. Właściwość PoolNonpagedBytes w Win32_PerfFormattedData_PerfOS_Memory jest obliczana inaczej niż właściwość PoolPagedBytes w Win32_PerfFormattedData_PerfProc_Process, więc może nie być równa sumie PoolPagedBytes dla wszystkich wystąpień Win32_PerfFormattedData_PerfProc_Process. Ta właściwość wyświetla tylko ostatnią obserwowaną wartość; to nie jest średnia.

uint64 PrivateBytes; 

Bieżąca wartość w bajtach przydzielona przez ten proces, której nie można udostępnić innym procesom.

uint64 VirtualBytes; 

Bieżący rozmiar w bajtach wirtualnej przestrzeni adresowej, której używa proces. Korzystanie z wirtualnej przestrzeni adresowej niekoniecznie oznacza odpowiednie użycie dysku lub stron pamięci głównej. Przestrzeń wirtualna jest skończona i przy użyciu zbyt dużej ilości proces może ograniczyć możliwość ładowania bibliotek.

uint64 WorkingSet; 

Maksymalna liczba bajtów w zestawie roboczym tego procesu w dowolnym momencie. Zestaw roboczy to zestaw stron pamięci ostatnio dotkniętych wątkami w procesie. Jeśli wolna pamięć w komputerze przekracza próg, strony pozostaną w roboczym zestawie procesu, nawet jeśli nie są używane. Gdy wolna pamięć spadnie poniżej wartości progowej, strony zostaną obcięte z zestawów roboczych. Jeśli są one wymagane, są one następnie łagodnie powleczone z powrotem do zestawu roboczego, zanim opuszczą pamięć główną.

Obecnie używam pola WorkingSet do zgłaszania zużycia pamięci procesu. Jednak nie jest to zgodne z tym, co pokazuje Menedżer zadań. Próbowałem z PrivateBytes, ale to też nie jest "poprawne". Proces, który monitoruje aplikacja, jest procesem .NET (jeśli w ogóle ma to znaczenie), a aplikacja pobiera co najmniej 100 MB więcej pamięci niż to, co wyświetla Menedżer zadań w tym samym czasie.

Pytanie więc, jaka jest "formuła" do obliczenia najlepszego przybliżenia użycia pamięci procesowej, jak pokazuje Menedżer zadań?

enter image description here

Odpowiedz

3

Win32_PerfFormattedData_PerfProc_Process jest prawidłowa klasa. Właściwość, z której pochodzi, to WorkingSetPrivate. Brak formuły/obliczenia.

Powiązane problemy