c# - que - flush() python
diferencia entre la secuencia de la memoria y filestream (6)
Durante la serialización, podemos usar flujo de memoria o secuencia de archivos.
¿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();
}
}
}
En la forma más simple, un MemoryStream escribe datos en la memoria, mientras que 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.
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.
Mientras que una secuencia de archivo lee de un archivo, una secuencia de memoria se puede utilizar para leer datos mapeados en la memoria interna de la computadora (RAM). Básicamente está leyendo / escribiendo secuencias de bytes desde la memoria.
Stream es una representación de bytes. Ambas clases se derivan de la clase Stream que es abstracta por definición.
Como su nombre 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 planeas 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 búferes y archivos temporales en una aplicación.
Tener una experiencia amarga sobre el tema, esto es lo que descubrí. 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.
Una secuencia de memoria maneja datos a través de un buffer en la memoria. Un filestream se ocupa de los archivos en el disco.