2014-10-03 4 views
1

Я пытаюсь измерить использование памяти приложения, для этого есть два пути;PerformanceCounter vs Process

  1. PerformanceCounter класс (Working Set - Private)
  2. класс Process (PrivateMemorySize64)

Но они дали два различных значения использования памяти.

Вопросы:

  1. Почему дают разные значения.
  2. Какой я должен использовать.

благодарит за вашу помощь.

+0

Можете ли вы показать свой код, измеряющий эту разницу? –

ответ

1

Почему они выдают разные значения?

Потому что они отслеживают различные типы памяти.

Свойство PrivateMemorySize64 из класса Process является эквивалентом счетчика производительности Private Bytes.

Чтобы обновить свою память, частные байты - это память, которую ваше приложение запросило (выделило), но оно не обязательно используется. Кроме того, частные байты - это не только физическая память, но и выгружаемые файлы и т. Д.

С другой стороны рабочий стол Working - частный счетчик производительности отслеживает подмножество частных байтов, которое представляет только физическую память, процесс использует и не может использоваться совместно с другими процессами.

Какой я должен использовать?

Это зависит от того, что вы хотите отслеживать. Оба полезны (и их еще больше!). Если вы хотите отслеживать всю память, выделенную текущим процессом, то это означает, что частные байты. Если вы хотите отслеживать только физическую память, используемую процессом, тогда вы должны использовать Рабочий набор.

Постоянно возрастающее значение любого из этих параметров может указывать на проблемы в коде.

Счетчики производительности хорошие, и вы должны их использовать, но имейте в виду, что они включают в себя множество вещей, не связанных непосредственно с написанным вами кодом, и если вы хотите получить более подробную информацию об использовании памяти кода i рекомендовал бы дополнить ваши усилия анализа хорошим профилированием памяти.