Tenemos una v.large Dictionary<long,uint>
(varios millones de entradas) como parte de una aplicación C# de alto rendimiento. Cuando la aplicación se cierra, serializamos el diccionario en el disco usando BinaryFormatter
y MemoryStream.ToArray()
. La serialización vuelve en aproximadamente 30 segundos y produce un archivo de aproximadamente 200 MB de tamaño. Cuando intentemos deserializar el diccionario con el siguiente código:Serialización y deserialización V.Large Dictionary en C#
BinaryFormatter bin = new BinaryFormatter();
Stream stream = File.Open("filePathName", FileMode.Open);
Dictionary<long, uint> allPreviousResults =
(Dictionary<long, uint>)bin.Deserialize(stream);
stream.Close();
Tarda unos 15 minutos en volver. Hemos probado alternativas y la parte lenta definitivamente es bin.Derserialize(stream)
, es decir, los bytes se leen desde el disco duro (SSD de alto rendimiento) en menos de 1 segundo.
¿Puede alguien señalar lo que estamos haciendo mal, ya que queremos el tiempo de carga en el mismo orden que el tiempo de guardar?
Saludos, Marc
¿Cuál es el tipo de diccionario? ES DECIR. ¿Es como: Diccionario? –
CodingGorilla
Acabo de darme cuenta de que realmente agregué eso a la publicación original, pero estaba dentro de corchetes triangulares, por lo que no apareció. El diccionario es (long, uint). – MarcF
Hmm. Interesante. Podría haber jurado que habría implicado cadenas: muchas asignaciones de cadenas en el montón. –