Подтвердить что ты не робот

Как рассчитать использование памяти в качестве диспетчера задач?

Хорошо, поэтому я использую WMI (.net/С#) для постоянного сбора данных о конкретном процессе, запущенном на машине. Я получаю данные через класс Win32_PerfFormattedData_PerfProc_Process. Этот класс обладает множеством свойств, но те, которые нас интересуют, следующие:

  uint64 PageFileBytes;

Значение в байтах, которое этот процесс использовал в файлах подкачки. Пейджинговые файлы хранят страницы памяти, используемые процессом, которые не содержатся в других файлах. Файлы подкачки разделяются всеми процессами, а нехватка места в файлах подкачки может помешать другим процессам выделять память.

  uint32 PoolNonpagedBytes;

Значение в байтах в невыгружаемом пуле - область системной памяти (физическая память, используемая операционной системой) для объектов, которые нельзя записать на диск, но они должны оставаться в физической памяти до тех пор, пока они выделены. Пул PoolNonpagedBytes в Win32_PerfFormattedData_PerfOS_Memory вычисляется иначе, чем свойство PoolPagedBytes в Win32_PerfFormattedData_PerfProc_Process, поэтому он может не совпадать с общим количеством пулов PoolPagedBytes для всех экземпляров Win32_PerfFormattedData_PerfProc_Process. Это свойство отображает только последнее наблюдаемое значение; это не среднее.

  uint32 PoolPagedBytes;

Значение в байтах в выгружаемом пуле - область системной памяти (физическая память, используемая операционной системой) для объектов, которые могут быть записаны на диск, когда они не используются. Свойство PoolNonpagedBytes в Win32_PerfFormattedData_PerfOS_Memory вычисляется иначе, чем свойство PoolPagedBytes в Win32_PerfFormattedData_PerfProc_Process, поэтому оно может не совпадать с общим количеством пулов PoolPagedBytes для всех экземпляров Win32_PerfFormattedData_PerfProc_Process. Это свойство отображает только последнее наблюдаемое значение; это не среднее.

  uint64 PrivateBytes;

Текущее значение в байтах, которое этот процесс выделил, который не может быть передан другим процессам.

  uint64 VirtualBytes;

Текущий размер в байтах виртуального адресного пространства, которое использует этот процесс. Использование виртуального адресного пространства необязательно подразумевает соответствующее использование страниц диска или основной памяти. Виртуальное пространство конечно и, используя слишком много, процесс может ограничить его способность загружать библиотеки.

  uint64 WorkingSet;

Максимальное число в байтах в рабочем наборе этого процесса в любой момент времени. Рабочий набор - это набор страниц памяти, недавно затронутых потоками процесса. Если свободная память на компьютере превышает пороговое значение, страницы остаются в рабочем наборе процесса, даже если они не используются. Когда свободная память опускается ниже порога, страницы обрезаются из рабочих наборов. Если они требуются, они затем с мягкой ошибкой возвращаются в рабочий набор, прежде чем они покинут основную память.

В настоящее время я использую поле WorkingSet для отчета об использовании памяти процесса. Однако это не совпадает с тем, что показывает диспетчер задач. Я пробовал с PrivateBytes, но это тоже не "правильно". Процесс, который контролирует приложение, - это процесс .NET(если это вообще имеет значение), и приложение сообщает, что оно использует не менее 100 МБ больше памяти, чем показывает диспетчер задач одновременно.

Итак, вопрос в том, что такое "формула" для вычисления наилучшего приближения использования памяти процесса, как показано диспетчером задач?

enter image description here

4b9b3361

Ответ 1

Win32_PerfFormattedData_PerfProc_Process - правильный класс. Свойство, которое он извлекает, равно WorkingSetPrivate. Никакой формулы/расчета не требуется.