Каким будет эффект обрезки моего «рабочего набора» в системе без файла подкачки? - PullRequest
2 голосов
/ 04 февраля 2011

Клиент жалуется, что моя программа использует слишком много памяти.Однако, поработав с ними некоторое время, я понял, что:

  1. Они отключили свой файл подкачки (в окне своих служб терминалов).
  2. Онибеспокоюсь о размере фигуры «частный рабочий набор» в диспетчере задач для моей программы.

Итак, мой вопрос, могу ли я просто урезать размер рабочего набора с помощью EmptyWorkingSet () после моегоПрограмма запустилась (она использует много памяти во время синтаксического анализа XML, но затем удаляет ее, но рабочий набор, похоже, не выключается).Однако поможет ли это клиенту?У меня такое ощущение, что это просто означает, что рабочий набор будет разбит на страницы, и я верю, что если у вас отключен файл подкачки, рабочий набор все равно поддерживается реальной памятью ....

Это правда, чтобы сказатьто, что диспетчер задач сообщает как "частный рабочий набор", действительно, сколько у моей программы новых / недопустимых?

Ответы [ 3 ]

3 голосов
/ 04 февраля 2011

По крайней мере, в смысле стандартной терминологии, «частный рабочий набор» - это объем памяти, отображенной вашей программой, который не поддерживается файлами (исполняемыми программами, dll-файлами или файлами, отображаемыми вручную в памяти) на диске или другом общие ресурсы. Если включен режим подкачки (подкачки), это объем пространства подкачки, который занимала бы ваша программа, если бы она была полностью выгружена из памяти.

Я бы согласился с вашим руководством, что вам нужно исправить свою раздутую программу. Отключение свопа - это очень разумное решение для клиента с минимальными задержками. Если ваша программа использует 2 ГБ памяти, возможно, вам нужно переосмыслить все библиотеки, которые вы используете для представления данных XML в памяти.

1 голос
/ 08 февраля 2011

Вы заметили, что ваш рабочий набор увеличивается после new/malloc.Это потому, что они просят у ОС память.Вы также отметили, что он не падает после delete/free.Это потому, что они не возвращают память в ОС.На нормальной, вменяемой системе это не проблема.Неиспользуемое пространство памяти для вашего процесса будет в конечном итоге подкачки, нетронутым и не в оперативной памяти.

В этом специальном окне лучше переопределить operator new прямым вызовом HeapAlloc и operator delete с звонком на HeapFree.Включите кучу с низкой фрагментацией для Server 2003;это уже по умолчанию на 2008 год.

0 голосов
/ 04 февраля 2011

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

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