2011-11-16 9 views
36

Durante la serialización podemos usar la secuencia de la memoria o la secuencia del archivo.diferencia entre la secuencia de la memoria y filestream

¿Cuál es la diferencia básica entre estos dos? ¿Qué significa la secuencia de memoria?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Runtime.Serialization.Formatters.Binary; 

namespace Serilization 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      MemoryStream aStream = new MemoryStream(); 
      BinaryFormatter aBinaryFormat = new BinaryFormatter(); 
      aBinaryFormat.Serialize(aStream, person); 
      aStream.Close(); 
     } 
    } 
} 

Respuesta

52

La transmisión es una representación de bytes. Ambas clases se derivan de la clase Stream que es abstracta por definición.

Como su nombre lo indica, un FileStream lee y escribe en un archivo mientras que un MemoryStream lee y escribe en la memoria. Por lo tanto, se relaciona con el lugar donde se almacena la secuencia.

Ahora depende de cómo planea usar ambos. Por ejemplo: supongamos que quiere leer datos binarios de la base de datos, ingresará un MemoryStream. Sin embargo, si quiere leer un archivo en su sistema, debe ingresar a FileStream.

Una ventaja rápida de un MemoryStream es que no es necesario crear memorias intermedias y archivos temporales en una aplicación.

+5

dado que el objeto ya está en la memoria, ¿por qué asignar un flujo de memoria para la serilización? – Raghav55

+0

Porque la secuencia de memoria manipula el objeto como una secuencia de bytes, no como su programa lógico "significado". – Tudor

+0

@tudor: dado que soy un novato de .net, ¿puedes explicar en breif sobre esto? – Raghav55

6

En la forma más simple, un MemoryStream escribe datos en la memoria, mientras que un FileStream escribe datos en un archivo.

Normalmente, uso MemoryStream si necesito una transmisión, pero no quiero que nada penetre en el disco, y uso FileStream al escribir un archivo en el disco.

5

Mientras una secuencia de archivos se lee desde un archivo, una secuencia de memoria se puede utilizar para leer datos asignados en la memoria interna de la computadora (RAM). Básicamente está leyendo/escribiendo secuencias de bytes desde la memoria.

+0

que es mejor cuando se detallan los datos de gran tamaño? Si los datos de serilize son grandes y la memoria disponible es pequeña. ¿Qué sucederá en este caso cuando usemos el flujo de memoria? – Raghav55

+1

Si sus datos exceden la memoria disponible, eventualmente comenzará a enviar páginas al disco. Esto es malo porque todo el rendimiento del sistema se degradará. En este caso, es mejor simplemente transmitir a un archivo. – Tudor

2

Una secuencia de memoria maneja los datos a través de un búfer de memoria. Un filestream se ocupa de los archivos en el disco.

2

Tener una experiencia amarga en el tema, esto es lo que he descubierto. si se requiere rendimiento, debe copiar el contenido de una cadena de archivos en un flujo de memoria. Tuve que procesar el contenido de 144 archivos, 528kbytes cada uno y presentar el resultado al usuario. Tardó 250 segundos aprox. (!!!!). Cuando acabo de copiar el contenido de cada extensión de archivos en un flujo de memoria, (método CopyTo) sin cambiar nada, el tiempo se redujo a aproximadamente 32 segundos. Tenga en cuenta que cada vez que copia una secuencia a otra, la secuencia se agrega al final de la secuencia de destino, por lo que es posible que deba 'rebobinarla' antes de copiarla. Espero eso ayude.

+7

¿Experiencia amarga? Bueno, por supuesto, manipular archivos en la RAM va a ser más rápido que manipular archivos en el disco. ¿Que esperabas? ;-) – tomfanning

0

La serialización de objetos en la memoria casi no es útil, en mi opinión. Necesita serializar un objeto cuando desea guardarlo en el disco. Normalmente, la serialización se realiza desde el objeto (que está en la memoria) hasta el disco, mientras que la deserialización se realiza desde el objeto serializado guardado (en el disco) hasta el objeto (en la memoria).

Por lo tanto, la mayoría de las veces, desea serializar en el disco, por lo tanto, utiliza un Filestream para la serialización.

Cuestiones relacionadas