Sto lavorando su un'applicazione nativa C++/Win32/MFC su Windows 7. Sto utilizzando CFile per aprire un file memorizzato su un server remoto (con i flag, CFile :: modeRead | CFile :: shareDenyWrite). Il server esegue Windows Server 2008 e sto accedendo al file su un'unità condivisa tramite la normale condivisione dei file di Windows. Una volta aperto il file, lo leggerò come descritto di seguito.prestazioni quando si accede a un file su un server di rete in sequenza dopo averlo acceduto in modo casuale
In primo luogo, sto cercando di più posizioni nel file (10 posizioni) e la lettura di piccole sezioni (128 byte). Quindi, cerco l'inizio e la lettura sequenzialmente attraverso l'intero file.
Quello che ho notato è che fare quanto sopra è stato MOLTO più lento del semplice aprire il file e leggerlo. Le ricerche e campionature casuali iniziali sono molto veloci, quasi istantanee anche con un file di grandi dimensioni. La cosa interessante è che anche se questo è veloce, nella parte successiva, la scansione del file è molto lenta se confrontata con la semplice scansione senza l'accesso casuale iniziale.
Nel tentativo di capire cosa stava succedendo ho tirato su il monitor delle prestazioni e guardato il traffico di rete. Se faccio solo la lettura sequenziale del file, sto scaricando da 3,5 MB/s tramite l'adattatore wireless. Se prima cerco in giro in modo casuale, poi leggo sequenzialmente sto ottenendo solo 300kB/s durante la lettura sequenziale.
La soluzione era chiudere e riaprire il file dopo aver eseguito la parte di accesso casuale. Quando l'ho fatto, la lettura sequenziale ha accelerato.
Quindi sembra che fare le letture di accesso casuale (ricerca e lettura) abbia fatto qualcosa sul server che ha causato la lettura sequenziale di essere lento. Mi chiedo, qualcuno sa per certo che cosa sta succedendo qui e qual è la vera causa del comportamento che sto vedendo? Anche se ho una soluzione per questo mi piacerebbe capire meglio cosa sta succedendo sotto il cofano per causare questo.
Puramente speculazione, potrebbe essere possibile che Windows abbia realizzato che il file è stato utilizzato per l'accesso casuale, e quindi disabilitato il precaricamento delle pagine sequenziali del file? Ne dubito comunque. –