2011-01-01 11 views
6

Descrizione dei dettagli di recente segnalata del flag FILE_FLAG_NO_BUFFERING in MSDN e alcuni risultati di ricerca di Google relativi all'I/O senza buffer in Windows.L'utilizzo di FILE_FLAG_NO_BUFFERING restituirà un guadagno di velocità notevole?

http://msdn.microsoft.com/en-us/library/aa363858(v=vs.85).aspx

mi chiedo ora, è davvero importante prendere in considerazione l'opzione senza buffer nel file di programmazione di I/O? Dato che molti programmi usano semplicemente iostream C stream I/O o C++, non ho dato alcuna attenzione al flag FILE_FLAG_NO_BUFFERING prima.

Diciamo che stiamo sviluppando un programma di foto explorer come Picasa. Se implementiamo I/O senza buffer, la velocità di visualizzazione delle miniature potrebbe mostrare differenze evidenti negli utenti ordinari?

+0

+1 a entrambe le risposte, grazie! Ho provato il caricamento di file bufferizzati e non bufferizzati con il mio vecchio progetto di Photo Explorer. Poiché viene letto solo uno scenario sequenziale, non vi è alcun rallentamento drammatico e non è possibile riscontrare alcuna notevole accelerazione. – 9dan

+0

Penso che si possa essere certi che l'I/O di file non bufferato non ha nulla a che fare con le applicazioni per l'utente finale :) – 9dan

risposta

7

No, questo flag non è per gli utenti di dischi tipici. È per programmi come i database in cui è necessario eseguire la propria gestione della cache dei file per prestazioni ottimali. Mentre sono sicuro che potresti trovare situazioni in cui accelererebbe il tuo programma, per la maggior parte vorresti usare il buffering fornito dal sistema operativo - ecco perché è lì.

+1

Non sono d'accordo. Vai avanti e copia un file da 40 GB tra i server usando il buffering fornito dal sistema operativo. Il tuo server esaurirà la memoria e eseguirà la scansione. Molto brutto in produzione. Dobbiamo usare questo flag quando copiamo file di database di grandi dimensioni tra server. – Brain2000

+2

@ Brain2000: Con cosa non sei d'accordo? Ho detto: "È compito dei programmi [che] devono eseguire la propria gestione della cache dei file per prestazioni ottimali" e hai fornito un esempio di tale programma. Sembra che tu sia davvero d'accordo con me. – Gabe

+0

Se la disattivazione della cache rientra nella "gestione della cache dei file dell'utente", allora sì, sono d'accordo con te. – Brain2000

11

Oh Signore no. Lo rendi drammaticamente più lento usando quella bandiera. Evita la cache del file system, quel meraviglioso pezzo di codice che può indovinare con quasi un'accuratezza psichica che ti consigliamo di leggere il settore N + 1 dopo aver letto N. E solo pre-carica se è economico ottenere.

È particolarmente grave per la scrittura, motivo per cui esiste l'opzione, non si ottiene il risentimento pigro. Ciò significa che il tuo programma può essere eseguito solo alla velocità di scrittura del disco. Il che è molto, molto lento. Il vantaggio della bandiera è che puoi essere sicuro che sia stato scritto. Aiuta ad implementare gli aggiornamenti dei dischi transazionali, il tipo a cui i motori di dbase si preoccupano.

Ma prova questo per vedere l'effetto.

Problemi correlati