windows - Udskyder kun-kort-hukommelseskortede sider fra hukommelsen?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har nogle store binære filer, som jeg nu læser ved hjælp af hukommelseskortlægning på Windows. Alt fungerer fint, men problemer starter, når filstørrelsen er større end hukommelsen. På en 24 GiB-hukommelsesmaskine kortlægger jeg f.eks. En 64 GiB-fil og så laver jeg mere eller mindre streaming gennem det (ikke helt streaming, men ok '). Ikke desto mindre vinder processen med al minde på et eller andet tidspunkt.


Jeg rører hver byte i filen præcis en gang, så det skal være nok til at lade lad os sige 4-5 GiB rundt for optimal ydeevne. Er der mulighed for at tvinge Windows (7) til at kassere sider? FlushViewOfFile kasserer kun beskidte sider, men i min brugstilstand læser jeg kun fra filen. Jeg har allerede indstillet NO\_BUFFER-flagget, men jeg vil gerne kunne reducere sideprioriteten på en eller anden måde, så de bliver udsat hurtigere. Lige nu, når hukommelsen er fuld, kommer appen til en slibestop, da Windows sider ud af alt.


[[Rediger]] Det er en 64-bit applikation på 64-bit windows.

Bedste reference


Kald ikke CreateFileMapping en gang til, og ring til MapViewOfFile og UnmapViewOfFile, efterhånden som du har brug for segmenter af filen. UnmapViewOfFile burde få siderne til at kasseres.


Du kan selvfølgelig have flere visninger fra samme fil kortlægning på én gang, de kan overlappe eller ikke overlappe hinanden, og overlappende visninger vil være sammenhængende (selv på tværs af forskellige filmappings og forskellige processer).

Andre referencer 1


En anden mulighed er at VirtualUnlock de sider, du ved, du ikke vil bruge i et stykke tid. Hvis siderne ikke er låst i øjeblikket, fjerner VirtualUnlock dem fra arbejdssættet og placeres i standby-listen, ligesom hvis du omkodede dem.