2008-09-24 18 views

Respuesta

34

System.IO.File.WriteAllBytes(path, data) debería estar bien.

+2

+1 para obtener un ejemplo completo - thx. – barrypicker

3

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."

+0

¿alguna muestra real con código fuente? – Kiquenet

3

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.

1

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.

+0

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

7

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.

Cuestiones relacionadas