Rendimiento: utilizar un BinaryReader en un MemoryStream para leer una matriz de bytes, o leer directamente?

StackOverflow https://stackoverflow.com/questions/3029189

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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top