Sto utilizzando i file mappati in memoria per avere accesso in lettura/scrittura a un numero elevato di file di immagine (~ 10000 x 16 MB) in Windows 7 a 64 bit. I miei obiettivi sono:Come svuotare in modo asincrono un file mappato in memoria?
Avere più dati possibile nella cache.
Poter allocare nuove immagini e scrivere a quelli più velocemente possibile.
Pertanto, sto utilizzando i file mappati in memoria per accedere ai file. Il caching funziona bene, ma il sistema operativo non sta scaricando pagine sporche finché non sono quasi fuori dalla memoria fisica. A causa di ciò allocare e scrivere su nuovi file è piuttosto lento una volta che la memoria fisica è stata riempita.
Una soluzione potrebbe essere usare regolarmente FlushViewOfFiles()
, ma questa funzione non tornare fino a quando i dati sono stati writen su disco.
C'è un modo per svuotare in modo asessuato un mapping di file? L'unica soluzione che ho trovato è di nuovo a Unmap()
e MapViewOfFile()
, ma con questo approccio non posso essere sicuro di ottenere di nuovo lo stesso puntatore di dati. Qualcuno può suggerire un approccio migliore?
Edit: Leggendo la documentazione WINAPI
un po 'di più, sembra che ho trovato una soluzione adatta al mio problema:
Calling VirtualUnlock()
su un intervallo di memoria che non è bloccato i risultati in un rossore di pagine sporche.