Непонятное использование памяти .net - PullRequest
0 голосов
/ 30 октября 2018

Использование памяти процесса включает (может называться VirtualMemory):

  • PrivateMemmory: выделен для процесса и не может использоваться другими процессами.
  • SharedMemory: среда выполнения или третья связанная библиотека.
  • CommitedMemory [или PagedMemory]: сопоставлено с жестким диском. (готов к использованию)
  • ReservedMemory: только объявлено (не существует и без адреса).

Вот мое понимание:

Virtual Memory = PrivateMemmory + SharedMemory + CommitedMemory + ReservedMemory;
WorkSet Memory = PrivateMemmory + SharedMemory + CommitedMemory;
Free Memory = 'Virtual Memory' - 'WorkSet Memory';

Я вычисляю общий объем используемой памяти процесса (не включая зарезервированный), написанный на c # Слева - VMMap, а справа - VS Monitor.

Общий объем памяти процесса составляет около 5 ГБ, а зарезервированная память составляет около 4 ГБ в VMMap, и VS Monitor показывает, что VirtualMemorySize64 составляет около 5 ГБ, я запутался, как я могу получить общий объем используемой памяти. в VMMap есть 4 ГБ зарезервированной памяти, как я могу получить зарезервированную память с помощью класса .net Process.

Я установил значение TotalUsageMemory с кодом ниже, это правильно?

Int64 TotalUsageMemory = proc.WorkingSet64 + proc.PagedMemorySize64;

.net process report with VMMap

1 Ответ

0 голосов
/ 02 ноября 2018

Числа не складываются так. Находится ли страница в рабочем наборе или нет, не зависит от того, является ли она общедоступной или нет. Это опять-таки (я считаю) не зависит от того, совершено оно или нет.

Правильный счетчик зависит от вопроса, на который вы хотите ответить. К сожалению, нет счетчика, который бы полностью соответствовал интуитивному представлению об использовании памяти. Для этого обычно используются частные байты. Рабочий набор не имеет большого значения на практике. Этот счетчик может измениться в любое время из-за действий ОС. Виртуальная память также не имеет значения с точки зрения производительности.

Обычно использование памяти - это память, которая была постепенно использована при запуске этого процесса. Это частные байты.

Не существует счетчика или вычисления, чтобы дать вам значение TotalUsageMemory.

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