5

多くのメモリ マップ ファイルを使用するプロセスがあります。
問題は、マシンのメモリが不足している場合でも、これらのファイルが物理メモリに保持され、他のプロセスがこのメモリを必要とすることです。

SetProcessWorkingSetSizeを使用してプロセスのワーキング セットを制限しようとしましたが、役に立ちません。プロセスのワーキング セットが最大値を超えて増加し続けます。

プロセスのワーキング セットを制限するより良い方法はありますか?
ページング メモリ マップ ファイルの Windows のヒューリスティックを変更できますか?

4

4 に答える 4

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);
        }
}
于 2010-08-15T06:01:45.830 に答える
2

メモリ マップ ファイルを含むプロセスがそれらのページの多くを保持していることがわかった場合、それは、OS がメモリ マップ領域を破棄して他のプロセスに渡す必要がないことを意味します。では、マップされたファイルに現在使用されているメモリを他のプロセスが実際に必要としていることが、どのようにわかりますか? OS の物理 RAM が少ないからといって、何の意味もありません。他のプロセスは、OS がマップされたページを削除して RAM をページに与えるようにメモリを要求する必要があります。

そのため、mmap-I/O プロセスは、RAM の使用頻度が低い他のプロセスを枯渇させているようです。1 つの方法は、不足しているプロセスでメモリを慎重にロックすることです。win32 の VirtualLock を見てください。

于 2009-10-25T14:17:36.557 に答える
0

ここで私の答えを確認してください。VirtualUnlock() を使用すると、MMF の一部を手動でコミット解除できます。たとえば、すぐに再びアクセスすることはないと思われるセクション。

于 2009-12-11T02:40:25.557 に答える