2010-03-18 3 views
1

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

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

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

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

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

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

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

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

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

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

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

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

Приветствия,

Джон

ответ

2

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

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

Смежные вопросы