Frage

Ich habe einen Prozess, der viel Speicher abgebildeten Dateien verwendet.
Das Problem ist, dass diese Dateien im physischen Speicher gehalten werden, auch wenn die Maschine wenig Speicher ist, und andere Prozesse erfordern diesen Speicher.

Ich habe versucht mit SetProcessWorkingSetSize den Prozess Arbeitsseiten zu begrenzen, aber es hilft nicht, hält der Prozess Arbeitsseiten über den Maximalwert wächst.

Gibt es einen besseren Weg, um den Prozess Working Set zu begrenzen?
Kann ich Windows' heuristcs für Paging-Speicher abgebildeten Dateien ändern?

War es hilfreich?

Lösung 2

Ended Brute-Force-VirtualUnlock zu verbrauchen.

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

Andere Tipps

Wenn Sie feststellen, dass Ihr Prozess mit den Memory-Mapped-Dateien halten auf eine Menge von diesen Seiten, dann bedeutet das O nicht alle Ihre Speicher abgebildeten Regionen auf andere Prozesse zu geben, zu verwerfen ist erforderlich. Also, wie Sie wissen, dass Sie andere Prozesse müssen tatsächlich den Speicher zur Zeit für die abgebildeten Dateien verwendet? Nur weil das Betriebssystem über wenig physischen RAM bedeutet nichts. Andere Verfahren haben Speicher fordern das Betriebssystem zu veranlassen, die zugeordneten Seiten zu löschen und geben RAM zu ihnen.

So scheint es, dass Ihr mmap-I / O-Prozess Ihren anderen Prozess hungert, die häufig RAM weniger verwendet. Ein Ansatz ist es umsichtig Speicher im Prozess zu sperren, die ausgehungert wird. Schauen Sie sich VirtualLock für win32.

Überprüfen Sie meine Antwort hier ; mit VirtualUnlock () Sie können manuell uncommit Teile der MMFs; zum Beispiel Abschnitte, die Sie nicht denken, Sie bald wieder erreichbar sein werden.

Ich denke, dieses Verhalten ist darauf zurückzuführen, wie MMF (Memory Mapped-Dateien) zu arbeiten. Hier finden Sie aktuelle dieser Blog-Artikel. Es wird erläutert, dass MMF-Dateien mit dem Windows-Auslagerungsprozess überspringen und somit nicht von der Seite Datei gesichert werden. Stattdessen wird die MMF die Datensicherung in sich selbst, das heißt letztlich braucht es mehr RAM, da es keine Seiten sind aus (Er, ich bin nicht sicher, ob ich das selbst - am besten, den Blog zu lesen)

Hier die MSDN-Dokumentation für Speicherdateien zugeordnet und hier ist eine andere Frage SO zu MMF beziehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top