Влияние краткосрочного высокого использования памяти ВМ (Windows)

В приложении, которое я пишу, я использую много контейнеров в памяти (контейнеры C++ std, но я не думаю, что это актуально).

Во время одной «задачи» моего приложения в случае интенсивного использования использование памяти в личных байтах достигает 1 ГБ.

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

(И нет, я не делаю ничего глупого, например, загружаю файлы в память — это все метаданные, связанные с выполняемой задачей).

Для большинства пользователей использование памяти во время этой задачи незначительно — это всего лишь 1% пользователей, которые хотят делать 500 000 «вещей» вместо 5000 «вещей».

Я собирался приступить к процессу, чтобы каким-то образом переместить много этого в памяти на диск, например. рабочий файл, встроенная БД.

Но потом я подумал: «Подождите минутку. Все эти решения по сути кэшируют память на диск. Разве не для этого нужна виртуальная память?».

Я не заинтересован в сохранении этих данных - это чисто временные данные, к которым мне нужен доступ во время выполнения задачи.

Итак, мой вопрос, что мне делать?

Я не хочу делать серьезный рефакторинг для этого 1%, но я хочу знать, как повлияет запуск приложения с таким большим объемом памяти.

Прав ли я, говоря, что я, вероятно, все равно не смогу добиться большего успеха, чем диспетчер виртуальных машин Windows?

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

Ваше здоровье,

Джон


person John    schedule 18.03.2010    source источник


Ответы (1)


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

Уравновешивание здесь заключается в том, является ли ваше приложение «достаточно важным», чтобы оправдать эти другие процессы. Обычно это Да на рабочей станции и решительное Нет на сервере.

person Hans Passant    schedule 18.03.2010