serializeobject serialize newtonsoft net jsonconvert example .net performance buffer

serialize - ¿Cuándo usar la clase.NET BufferedStream?



newtonsoft json serialize vb net (5)

El sitio de MSDN dice:

Un búfer es un bloque de bytes en la memoria utilizado para almacenar en caché los datos, lo que reduce el número de llamadas al sistema operativo. Los búferes mejoran el rendimiento de lectura y escritura. Se puede usar un buffer para leer o escribir, pero nunca para ambos simultáneamente. Los métodos de lectura y escritura de BufferedStream mantienen automáticamente el búfer.

¿Debería usar esta clase en cada ocasión posible?


Las secuencias de E / S de archivos normales ya están almacenadas en búfer mediante un StreamReader / StreamWriter.

Debido a que las operaciones de lectura / escritura en las transmisiones normalmente utilizan los métodos de lectura / escritura que toman una matriz de bytes, usted mismo proporcionará un cierto buffering.

Si usa matrices muy pequeñas o usa WriteByte, puede obtener un mejor rendimiento al usar un BufferedStream en el medio.


Lo que se debe usar en cada ocasión posible es el sentido común. No sirve de nada utilizar esta clase cuando lee-escribe desde un MemoryStream, pero puede ser muy útil cuando se hace en la red o en el disco IO (si las transmisiones para estos subsistemas no hacen el almacenamiento en búfer por sí mismas).


El siguiente es un texto de un curso en línea que estoy tomando:

La clase BufferedStream es una clase concreta que amplía la clase Stream y se usa para proporcionar un búfer de memoria adicional a otro tipo de transmisión, tanto de forma síncrona como asíncrona. La clase BufferedStream debe configurarse para leer o escribir cuando se crea una instancia de la clase, pero BufferedStream no puede configurarse para realizar ambas tareas al mismo tiempo.

Microsoft mejoró el rendimiento de todas las transmisiones en .NET Framework al incluir un búfer incorporado. El rendimiento mejoró notablemente al aplicar un BufferedStream a transmisiones existentes, como FileStream o MemoryStream. La aplicación de un BufferedStream a una secuencia existente de .NET Framework da como resultado un doble buffer.

La aplicación más común de la clase BufferedStream es en clases de flujo personalizado que no incluyen un búfer incorporado.


El mejor caso que conozco es cuando BinaryFormatter se serializa / deserializa directamente desde NetworkStream. El uso de BufferedStream entremedio aumenta el rendimiento diez veces.


Según Brad Abrams, casi nunca: enlace

No, no hay ningún beneficio al envolver un BufferedStream en un FileStream. Copiamos la lógica de almacenamiento en búfer de BufferedStream en FileStream hace aproximadamente 4 años para fomentar un mejor rendimiento predeterminado ... De hecho, no creo que haya ningún flujo en .NET Framework que lo requiera, pero podría ser necesario mediante implementaciones de Stream personalizadas si no hacen buffering por defecto.