Rendimiento: utilizar un BinaryReader en un MemoryStream para leer una matriz de bytes, o leer directamente?
-
26-09-2019 - |
Pregunta
Me gustaría saber si el uso de un BinaryReader
en un MemoryStream
creado a partir de una matriz de bytes (byte[]
) reduciría significativamente el rendimiento.
Hay datos binarios que quiero leer, y me da que los datos como una matriz de bytes. Actualmente estoy decidiendo entre dos enfoques para leer los datos, y tienen que aplicar muchos métodos de lectura en consecuencia. Después de cada acción de lectura, necesito la posición después los datos de lectura, y por lo tanto estoy considerando el uso de un BinaryReader
. El primer enfoque, no BinaryReader:
object Read(byte[] data, ref int offset);
El segundo enfoque:
object Read(BinaryReader reader);
Estos métodos Read()
será llamado muy a menudo, de forma sucesiva en los mismos datos hasta que todos los datos se ha leído.
Por lo tanto, el uso de un BinaryReader
se siente más natural, pero tiene mucho impacto en el rendimiento?
Solución
Vamos a crear una buena cantidad de basura por cada llamada a Read (byte []). Habrá 40 bytes para la MemoryStream, me dejó de contar en 64 bytes para la BinaryReader. Desechar también se utiliza normalmente, aunque no hace nada. Ya sea que los asuntos generales es imposible decir de su pregunta.
Yo personalmente prefiero la sobrecarga de lectura (BinaryReader), no sólo porque es más eficiente. Que también da la flexibilidad de cambiar la fuente de los datos. No tiene que estar en un byte [] más, se podría alimentar desde, digamos, un FileStream o NetworkStream.
Otros consejos
Si se utiliza un BinaryReader siente más natural, hacer eso. Dudo mucho que haya ninguna notable impacto en el rendimiento frente a la lectura de una matriz.