Помогите разобраться в памяти Windows - «Рабочий набор» - PullRequest
8 голосов
/ 23 марта 2011

Я обнаружил несколько утечек памяти в моем приложении. Это была настоящая боль, но я наконец все подтянул. Тем не менее, есть один аспект управления памятью Windows, который смущает меня. Вот распечатка использования памяти приложением с течением времени ...

Time        PrivateMemorySize64        WorkingSet64
20:00:36    47480,                     50144
20:01:06    47480,                     50144
20:01:36    47480,                     50144
20:02:06    47480,                     149540
20:02:36    47480,                     149540
20:03:06    47480,                     149540

Рабочий набор увеличился с 49 МБ до 146 в течение 30 секунд. Это произошло в одночасье, поскольку приложение практически ничего не делало.

Кажется, что на рабочий набор (который показывает мне диспетчер задач) могут влиять другие приложения, такие как отладчики (как я узнал при поиске утечек памяти). После прочтения документации о том, что такое рабочий набор, у меня все еще нет хорошего понимания.

Любая помощь приветствуется.

Обновление : Благодаря некоторым ссылкам от респондентов, а также дополнительному поиску, я лучше понимаю, как отдельный процесс может привести к росту рабочего набора моего процесса. Полезно знать, что скачок в рабочем наборе не обязательно указывает на утечку вашего приложения ... Еще одна причина не полагаться на диспетчер задач для оценки памяти:)

Полезные ссылки:

Несколько слов об использовании памяти или: рабочий набор или личный рабочий набор

CyberNotes: Объяснение использования памяти Windows

Ответы [ 2 ]

6 голосов
/ 23 марта 2011

Проще говоря, рабочий набор - это набор страниц памяти, которые в настоящее время принадлежат вашему процессу и не выгружены (то есть в ОЗУ). Это несколько неточно, однако. Реальность намного сложнее.

Windows поддерживает минимальный размер рабочего набора и максимальный размер рабочего набора для каждого процесса. Минимальный рабочий набор прост, это то, что Windows предоставит каждому процессу (насколько это возможно, физическими ограничениями).

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

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

Однако, если никто не попросит больше памяти в это время (или если все требования могут быть удовлетворены на страницах, которые все равно не использовались), то доступ к одной из этих страниц просто заставит ее «волшебным образом появиться» и выкинет другую страницу вместо него.

Таким образом, у вашего процесса может быть больше страниц в оперативной памяти, чем на самом деле в его рабочем наборе, но он «официально» не владеет ими.

3 голосов
/ 23 марта 2011

Резидентный набор / Рабочий набор является частью Виртуального адресного пространства , которое в настоящее время находится в Физической памяти и, следовательно, не ПереставленоOut

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