Domanda

Ho un processo che utilizza molti file mappati in memoria.
Il problema è che quei file sono conservati nella memoria fisica, anche quando la macchina ha poca memoria e altri processi richiedono questa memoria.

Ho provato a utilizzare SetProcessWorkingSetSize per limitare il set di lavoro del processo, ma non aiuta, il set di lavoro del processo continua a crescere oltre il valore massimo.

Esiste un modo migliore per limitare il set di lavoro del processo?
Posso modificare l'euristc di Windows per i file mappati della memoria di paging?

È stato utile?

Soluzione 2

Finito con VirtualUnlock a forza bruta.

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);
        }
}

Altri suggerimenti

Se scopri che il tuo processo con i file mappati in memoria si aggrappa a molte di quelle pagine, significa che il sistema operativo non ha bisogno di scartare nessuna delle tue regioni mappate in memoria per dare ad altri processi. Quindi, come fai a sapere che altri processi hanno effettivamente bisogno della memoria attualmente utilizzata per i file mappati? Solo perché il sistema operativo ha poca RAM fisica non significa nulla. Altri processi devono richiedere memoria per far sì che il sistema operativo elimini le pagine mappate e fornisca RAM.

Quindi, sembra che il tuo processo I / O mmap muoia di fame l'altro tuo processo che utilizza la RAM meno frequentemente. Un approccio consiste nel bloccare giudiziosamente la memoria nel processo che sta morendo di fame. Guarda VirtualLock per win32.

Controlla la mia risposta qui ; con VirtualUnlock () è possibile decomprimere manualmente parti degli MMF; ad es. sezioni a cui non pensi di poter accedere di nuovo presto.

Penso che questo comportamento sia dovuto al funzionamento di MMF (Memory Mapped Files). Dai un'occhiata a questo articolo del blog. Spiega che i file MMF saltano il processo di paging di Windows e quindi non sono supportati dal file di paging. Invece, l'MMF diventa il backup dei dati in sé, il che significa, in definitiva, occupa più RAM poiché non è pagine esaurite (Er, non sono sicuro di averlo da solo - meglio leggere il blog!)

Ecco la documentazione MSDN per i file mappati in memoria e ecco un'altra domanda SO relativa all'FCM.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top