Quando utilizzare la classe .NET BufferedStream?
-
20-08-2019 - |
Domanda
Il sito MSDN afferma:
Un buffer è un blocco di byte in memoria utilizzato per memorizzare nella cache i dati, riducendo così il numero di chiamate all'operatore sistema. I buffer migliorano lettura e scrittura prestazione. È possibile utilizzare un buffer per leggere o scrivere, ma mai entrambi contemporaneamente. La lettura e Scrivi i metodi di BufferedStream mantenere automaticamente il buffer.
Dovrei usare questa classe in ogni occasione possibile?
Soluzione
Quello che segue è un testo di un corso online che sto seguendo:
La classe BufferedStream è concreta classe che estende la classe Stream e viene utilizzato per fornire un ulteriore buffer di memoria per un altro tipo di stream, sia in modo sincrono che in modo asincrono. Il BufferedStream la classe deve essere configurata su entrambi leggere o scrivere quando un'istanza di viene creata la classe, ma il file BufferedStream non può essere configurato su eseguire entrambi i compiti contemporaneamente tempo.
Microsoft ha migliorato le prestazioni di tutti i flussi in .NET Framework di compreso un buffer incorporato. Il prestazioni notevolmente migliorate di applicando un BufferedStream a esistente flussi, come FileStream o MemoryStream. Applicando a BufferedStream su un .NET esistente Il flusso del framework genera un doppio tampone.
L'applicazione più comune di La classe BufferedStream è personalizzata classi di flusso che non includono a buffer incorporato.
Altri suggerimenti
Secondo Brad Abrams, quasi mai: link
No, non vi è alcun vantaggio nell'avvolgere un BufferedStream attorno a FileStream. Abbiamo copiato la logica di buffering di BufferedStream & # 8217; in FileStream circa 4 anni fa per incoraggiare un migliore default performance ... In effetti, non credo che ci siano Stream nel .NET Framework che lo richiede, ma potrebbe essere necessario per uso personalizzato Esegui lo streaming di implementazioni se non eseguono il buffering per impostazione predefinita.
Il caso migliore che conosco è quando BinaryFormatter serializza / deserializza direttamente da NetworkStream. L'uso di BufferedStream tra di essi aumenta di dieci volte le prestazioni.
Ciò che deve essere usato in ogni possibile occasione è il buon senso. Non è utile utilizzare questa classe durante la lettura e la scrittura da e verso MemoryStream, ma potrebbe essere molto utile quando si esegue l'IO di rete o del disco (se gli stream per questi sottosistemi non eseguono il buffering da soli).
I normali flussi di I / O dei file sono già bufferizzati utilizzando StreamReader / StreamWriter.
Poiché le operazioni di lettura / scrittura su stream, normalmente utilizzano i metodi di lettura / scrittura che accettano un array di byte, fornirai naturalmente un po 'di buffering.
Se si utilizzano array molto piccoli o si utilizza WriteByte, è possibile ottenere prestazioni migliori utilizzando un BufferedStream in mezzo.