Nous avons un v.large Dictionary<long,uint>
(plusieurs millions d'entrées) dans le cadre d'une application C# haute performance. Lorsque l'application se ferme, nous sérialisons le dictionnaire sur disque en utilisant BinaryFormatter
et MemoryStream.ToArray()
. La sérialisation revient dans environ 30 secondes et produit un fichier d'environ 200 Mo. Lorsque nous essayons alors de désérialiser le dictionnaire en utilisant le code suivant:Sérialiser et désérialiser le dictionnaire V.Large 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();
Il faut environ 15 minutes pour revenir. Nous avons essayé des alternatives et la partie lente est définitivement bin.Derserialize(stream)
, c'est-à-dire que les octets sont lus à partir du disque dur (SSD haute performance) en moins d'une seconde.
Quelqu'un peut-il signaler ce que nous faisons de mal, car nous voulons que le temps de chargement sur le même ordre que le temps de gagner.
Cordialement, Marc
Quel est le type de dictionnaire? C'EST À DIRE. Est-ce comme: Dictionnaire? –
CodingGorilla
Je viens de réaliser que j'ai effectivement ajouté cela à l'article original mais il était à l'intérieur des parenthèses triangulaires, donc je ne me suis pas présenté. Le dictionnaire est (long, uint). – MarcF
Hmm. Intéressant. J'aurais juré qu'il y aurait eu des ficelles - beaucoup d'allocations de chaînes sur le tas. –