内存映射文件是否保留在物理内存中?

Mei*_*lon 5 windows memory-management memory-mapped-files

我有一个使用大量内存映射文件的进程。
问题是这些文件保存在物理内存中,即使机器内存不足,其他进程也需要这些内存。

我已经尝试使用SetProcessWorkingSetSize来限制进程工作集,但它没有帮助,进程的工作集不断增长超过最大值。

有没有更好的方法来限制进程的工作集?
我可以更改用于分页内存映射文件的 Windows 启发式方法吗?

Mei*_*lon 3

最终使用暴力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);
        }
}
Run Code Online (Sandbox Code Playgroud)