В приложении, которое я пишу, я использую много контейнеров в памяти (контейнеры C ++ std, но я не думаю, что это актуально).
Во время одной «задачи» моего приложения в случае интенсивного использования частное использование памяти в байтах достигает 1 ГБ.
В качестве небольшого контекста эта задача представляет собой задачу, инициированную пользователем, включающую файлы с сотнями тысяч. Вероятно, пользователь отключит эту функцию и оставит машину включенной.
(И нет, я не делаю ничего глупого, как загрузка файлов в память - все это метаданные, связанные с выполняемой задачей).
Для большинства пользователей использование памяти во время этой задачи незначительно - это всего лишь 1% пользователей, которые хотят сделать 500 000 «вещей» вместо 5000 «вещей».
Я собирался приступить к процессу, чтобы каким-то образом перенести большую часть этого содержимого в памяти, например, на диск. скретч-файл, встроенная БД.
Но потом я подумал - «подожди минутку. Все эти решения, по сути, кешируют память на диск. Разве не для этого нужна виртуальная память?».
Я не заинтересован в сохранении этих данных - это чисто временные данные, к которым мне нужен доступ во время выполнения задачи.
Итак, мой вопрос: что мне делать?
Я не хочу делать значительный рефакторинг за эти 1%, но я хочу знать, как работает приложение с таким большим объемом памяти.
Правильно ли я сказал, что, вероятно, я не смог бы работать намного лучше, чем менеджер виртуальных машин Windows?
При каких условиях это становится вредным? Хорошо, да, если бы я израсходовал всю реальную память, то было бы тяжело перезагрузить страницы. Но разве я не получил бы это в случае, если, например, встроенная база данных?
Приветствия
John