Serialisation : gros problème de rapidité avec BinaryFormatter

zeloostik Messages postés 16 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 13 octobre 2005 - 28 juil. 2004 à 12:51
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 - 30 août 2004 à 09:42
Bonjour !

J'ai un problème ennuyeux avec la sérialisation : elle fonctionne nickel pour tout ce qui est petits fichiers, mais là je voudrais sérialiser une liste de clients, et il y en a 11000. Ce qui me fait une ArrayList de 11000 object "Client".

Le truc c'est que ca fonctionne, le fichier final ne fait qu'a peine plus de 1 Mo, mais la sérialization met plus de 2 ou 3 minutes à se faire (100% de CPU...) !!! (alors que la déserialization est elle quasi-immédiate...)

Voilà deux méthodes que j'ai essayés pour serializer, avec le meme résultat :

1:
public static void Serialize(string FilePath, object ObjectToSerialize)
{
FileStream fs = new FileStream(FilePath, FileMode.Create);

BinaryFormatter formatter = new BinaryFormatter();
try 
{
formatter.Serialize(fs, ObjectToSerialize);
}
catch (SerializationException e) 
{
Error.show("Utils : Serialize",371,"Failed to serialize. Reason: " + e.Message);
throw;
}
finally 
{
fs.Close();
}

}


Seconde méthode :
public static void Serialize(string FilePath, object ObjectToSerialize)
{
try
{
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream(FilePath, FileMode.Create, FileAccess.Write, FileShare.None);
formatter.Serialize(stream, ObjectToSerialize);
stream.Close();
}
catch (Exception ex)
{
Error.show("Utils : Serialize",205,ex.ToString());
}

}

Merci d'avance si vous pouvez m'aider :)

6 réponses

TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
29 juil. 2004 à 02:59
Bah le problème est à plusieurs endroits.

Le fileStream est lent mais le memorystream pour 11000 objets c'est peut etre tendu , quoique un meg c'est gérable ;)

La serialization genère du XML assez verbeux donc la quantité d'info est importante et bcp d'accès I/O dans ton cas

Si tu n'as pas besoin de toutes les informations de la classes tu peux mettre des attributs not serializable. (pas sur que tu y gagnerais)

Sinon tu peux aussi overrider le serialize pour l'adapter à ce que tu veux.

Je vais aller pecher de l'info je revient si j'ai des trucs

::|The S@ib|::
MVP C#.NET
0
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
29 juil. 2004 à 03:04
ou pas pour le XML ;)

::|The S@ib|::
MVP C#.NET
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
29 juil. 2004 à 10:54
en fait je me demande si la serialisation binaire via le BinaryFormatter n'essaie pas de minimiser l'espace disque consommé
en gros il compare tous les items de la liste pour déterminer les doublons, d'où la consommation CPU

Cocoricoooooooo !!!!
0
zeloostik Messages postés 16 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 13 octobre 2005
30 juil. 2004 à 18:03
Merci pour toutes ces réponses !!!

La réponse de coq semble logique et corrobore ce que j'ai observé : le fichier va assez vite à "s'écrire" au début, puis ralentit très fortement, s'arrête pendant une bonne minute à 1060 ko et repart jusqu'a la fin vers 1200 ko.

Donc en fait est-ce que je devrais utiliser autre chose que le binaryformatter ?? Je veux éviter l'XML qui est un peu trop lisible à mon gout (et je passerais de toute facon à terme par un cryptage)...

Donc si vous avez une autre idée que le BinarryFormatter, elle est la bienvenue :-)

Merci ;-)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
zeloostik Messages postés 16 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 13 octobre 2005
29 août 2004 à 23:10
Quelqu'un aurait-il une autre idée ?
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
30 août 2004 à 09:42
pour ma part non dsl :(

Cocoricoooooooo !!!!
0
Rejoignez-nous