Отображенные в памяти файлы остаются в физической памяти? - PullRequest
4 голосов
/ 25 октября 2009

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

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

Есть ли лучший способ ограничить рабочий набор процесса?
Могу ли я изменить эвристики Windows для файлов подкачки в памяти?

Ответы [ 4 ]

2 голосов
/ 15 августа 2010

Завершено с использованием грубой силы VirtualUnlock.

PROCESS_MEMORY_COUNTERS pmc;
if (GetProcessMemoryInfo( hProcess, &pmc, sizeof(pmc)) )
{
        if (pmc.WorkingSetSize > MaxWorkingSetSize)
        {
                VirtualUnlock(FilePtr.pData, MaxWorkingSetSize);
                UnmapViewOfFile(FilePtr.pData);
                CloseHandle(FilePtr.hFileMap);
                CloseHandle(FilePtr.hFile);
        }
}
2 голосов
/ 25 октября 2009

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

Итак, похоже, что ваш процесс mmap-I / O истощает ваш другой процесс, который использует ОЗУ реже. Один подход заключается в разумной блокировке памяти в процессе, который подвергается голоданию. Посмотрите на VirtualLock для win32.

0 голосов
/ 11 декабря 2009

Проверьте мой ответ здесь ; с VirtualUnlock () вы можете вручную удалить части MMF; например, разделы, которые, как вы думаете, скоро не будут доступны снова.

0 голосов
/ 25 октября 2009

Я думаю, что это связано с тем, как работают MMF (Memory Mapped Files). Посмотрите эту статью блога. Это объясняет, что файлы MMF пропускают процесс подкачки Windows и, следовательно, не поддерживаются файлом подкачки. Вместо этого MMF становится резервной копией данных сама по себе, что означает, что, в конечном счете, она занимает больше оперативной памяти, так как она не выводит страницы (э-э, я не уверен, что получу это сам - лучше всего читать блог!)

Вот документация MSDN для файлов с отображенной памятью и вот еще один вопрос SO, относящийся к MMF.

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