Влияние кратковременного высокого использования памяти виртуальной машины (Windows) - PullRequest
1 голос
/ 18 марта 2010

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

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

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

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

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

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

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

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

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

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

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

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

Приветствия

John

1 Ответ

2 голосов
/ 18 марта 2010

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

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

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