begin process at 2012 02 08 23:43:59
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C#

 > 

Archives

 > 

Au secours

 > 

Serialisation : gros problème de rapidité avec BinaryFormatter


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Serialisation : gros problème de rapidité avec BinaryFormatter

mercredi 28 juillet 2004 à 12:51:49 | Serialisation : gros problème de rapidité avec BinaryFormatter

zeloostik

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 :)
jeudi 29 juillet 2004 à 02:59:16 | Re : Serialisation : gros problème de rapidité avec BinaryFormatter

TheSaib

Administrateur CodeS-SourceS
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
jeudi 29 juillet 2004 à 03:04:14 | Re : Serialisation : gros problème de rapidité avec BinaryFormatter

TheSaib

Administrateur CodeS-SourceS
ou pas pour le XML ;)

::|The S@ib|::
MVP C#.NET
jeudi 29 juillet 2004 à 10:54:18 | Re : Serialisation : gros problème de rapidité avec BinaryFormatter

coq

Administrateur CodeS-SourceS
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 !!!!
vendredi 30 juillet 2004 à 18:03:30 | Re : Serialisation : gros problème de rapidité avec BinaryFormatter

zeloostik

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 ;-)
dimanche 29 août 2004 à 23:10:56 | Re : Serialisation : gros problème de rapidité avec BinaryFormatter

zeloostik

Quelqu'un aurait-il une autre idée ?
lundi 30 août 2004 à 09:42:19 | Re : Serialisation : gros problème de rapidité avec BinaryFormatter

coq

Administrateur CodeS-SourceS
pour ma part non dsl :(


Cocoricoooooooo !!!!


Cette discussion est classée dans : serialize, binaryformatter, filepath, objecttoserialize, formatter


Répondre à ce message

Sujets en rapport avec ce message

Probleme de Deserialisation de Collections [ par Maiku ] BonjourJ'ai une ArrayList, une Collection si vous preferez qui contient des objets de différentes classes appartenant tous a une classe mère.J'arrive Sérialization, BinaryHeader [ par wizad ] Bonjour,Dans la cadre de la réalisation d'un système client/serveur, je rencontre un problème lors de la désérialisation d'un classe maison.general :b Serialisation avec binaryFormatter [ par ducker88 ] Bonjour à tous.Je suis en train d'essayer de serialiser un string en binaire par l'intermediaire d'un memorystream. Et ensuite de le recuperer.Voici m [databinding] formatter/parser les propriétés d'objets bindés. [ par mathmax ] Bonjour, J'aimerais savoir si il y a un moyen de formatter/parser les valeurs d'une colonne d'une DataGridView bindée à une datasource. Par exemple, Erreur outofmemory Serialize [ par binouse1305 ] Bonjour,Dans mon application serveur, lors de la sérialisation d'objets j'ai une erreur outofmemory. Apparemment ce là se produit lors de l'appel à la Ouvrir fichier [ par Le newbie ] Salut à tous,J'utilise Visual Web Developper 2005 et je souhaite pouvoir ouvrir un fichier correspondant à un enregistrement dans une base de données. Sérialisation/Désérialisation XML qui déconne... [ par vagg ] Bonjour à tous, Je reprend un programme datant de 5mois pour le modifier un peu mais j'ai un problème que j'ai déja eu mais pas moyen de me souvenir d Deserialize [ par facbest ] Bonjour, J'ai une form2 que je sérialise comme ça: MemoryStream ms = new MemoryStream(); BinaryFormatter bf = new BinaryFormatter() 2 form serialisation et déserialisation [ par facbest ] Bonjour, J'ai une form2 que je sérialise comme ça: MemoryStream ms = new MemoryStream(); BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(ms serialisation en C# [ par lason20 ] salut tout le monde cette fonction ci dessous est écrite en C++ qui permet serialiser et deserialiser un archive de données je veux la convertir en C


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,465 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales