Escenario bastante simple. Tengo un servicio web que recibe una matriz de bytes que se guardará como un tipo de archivo particular en el disco. ¿Cuál es la forma más eficiente de hacer esto en C#?¿Cuál es la forma más eficiente de guardar una matriz de bytes como un archivo en el disco en C#?
Respuesta
Eso sería File.WriteAllBytes()
.
System.IO.File.WriteAllBytes(path, data)
debería estar bien.
No estoy seguro de lo que quiere decir con "eficiente" en este contexto, pero usaría System.IO.File.WriteAllBytes(string path, byte[] bytes) - Ciertamente eficiente en términos de LOC.
Tal vez las clases System.IO.BinaryWriter y BinaryReader ayudarían.
http://msdn.microsoft.com/en-us/library/system.io.binarywriter.aspx
"escribe tipos primitivos en binario a un arroyo y soporta la escritura cuerdas en una codificación específica."
http://msdn.microsoft.com/en-us/library/system.io.binaryreader.aspx
"Lee tipos de datos primitivos como valores binarios en una codificación específica."
¿alguna muestra real con código fuente? – Kiquenet
tuve un problema similar vertido de una matriz de bytes 300 MB a un archivo de disco ...
Solía StreamWriter, y me tomó unos 30 minutos para volcar el archivo.
El uso de FilePut me llevó alrededor de 3-4 minutos, y cuando usé BinaryWriter, el archivo se volcó en 50-60 segundos.
Si utiliza BinaryWriter tendrá un mejor rendimiento.
En realidad, la forma más eficiente sería transmitir los datos y escribirlos cuando los reciba. WCF es compatible con la transmisión, por lo que puede que sea algo que desearía analizar. Esto es particularmente importante si lo hace con archivos de gran tamaño, ya que es casi seguro que no desea que el contenido del archivo esté en la memoria tanto en el servidor como en el cliente.
Este es un detalle importante del que nadie habló, pero como usted señala, WriteAllBytes no es la manera más eficiente de la memoria, ya que consume mucha memoria. Escribirlo sobre la marcha cuando sea posible es definitivamente mejor, incluso tuve una mejor asignación simplemente usando StreamWriter con un buffer más pequeño. – ForceMagic
Y WriteAllBytes simplemente realiza
using (FileStream stream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read))
{
stream.Write(bytes, 0, bytes.Length);
}
BinaryWriter tiene un nombre engañoso, que está diseñada para la escritura de las primitivas representaciones como un byte en vez de escribir datos binarios. Todo lo que hace su método Write (byte []) es ejecutar Write() en la secuencia que está utilizando, en este caso un FileStream.
- 1. ¿Cuál es la forma más eficiente de hacer matrices de bytes inmutables en Scala?
- 2. Cuál es la forma más eficiente de hacer operaciones bit a bit en una matriz C
- 3. ¿Cuál es la forma más eficiente de evitar operaciones duplicadas en una matriz de C#?
- 4. ¿Cuál es la forma más eficiente de ordenar un NSSet?
- 5. ¿Cuál es la forma más eficiente/elegante de eliminar elementos de una matriz en MATLAB?
- 6. Cómo almacenar una matriz de bytes como un archivo de imagen en el disco?
- 7. ¿Cuál es la forma más eficiente de almacenar una matriz de enteros en una columna MySQL?
- 8. guardar un archivo (de corriente) en el disco usando C#
- 9. ¿Cuál es la forma más eficiente de hacer tabla de consulta en C#
- 10. Cómo leer un recurso incrustado como una matriz de bytes sin escribirlo en el disco?
- 11. Forma más rápida (rendimiento) de convertir una cadena en una matriz de bytes [] en C#
- 12. ¿Cuál es la forma más eficiente de copiar de forma masiva a SQL Server desde Java?
- 13. Guardar NSMutableArray en el disco
- 14. ¿Cuál es la forma más eficiente de mover/cambiar el nombre de un nodo en NetworkX?
- 15. La forma más eficiente de leer el archivo
- 16. Dada una matriz de booleanos, ¿cuál es la forma más eficiente de seleccionar el índice de un valor TRUE aleatorio?
- 17. ¿Cuál es la forma más eficiente de cargar mi archivo JPG almacenado en ImageView?
- 18. ¿Cuál es la forma más eficiente de crear ListBuffer vacío?
- 19. ¿Cuál es la forma más eficiente de copiar en profundidad un objeto en Ruby?
- 20. ¿Cuál es la manera más eficiente de lanzar una lista como un marco de datos?
- 21. ¿Cómo guardar de forma segura un archivo en el disco en Android?
- 22. ¿Cuál es la forma más eficiente en C# para unir más de 2 archivos xml con el mismo esquema?
- 23. cuál es la forma recomendada de guardar una matriz M por N en la tabla sql
- 24. Manera eficiente de guardar datos en el disco mientras se ejecuta una tarea de cálculo intensivo
- 25. ¿La forma más eficiente de agregar matrices en C#?
- 26. La forma más fácil de convertir una matriz de bytes en Blob en Java
- 27. ¿Cuál es la forma más eficiente de ordenar las estructuras de C++ a C#?
- 28. La forma más fácil de convertir una Blob en una matriz de bytes
- 29. Android: forma más eficiente de pasar algunos bytes de solo lectura a C++ nativo
- 30. Extensión de Chrome: cómo guardar un archivo en el disco
+1 para obtener un ejemplo completo - thx. – barrypicker