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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top