IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Deserialization trop lente


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 72
    Par défaut Deserialization trop lente
    Bonjour à tous,

    Dans un programme, j'ai besoin de Serializer / Deserializer un objet qui contient une liste pouvant contenir des centaines de milliers de petits objets avec seulement 2 propriétés de type int.

    La Serialization s'effectue assez rapidement (1 à 2 secondes). Le fichier créé a une taille d'environ 10 Mo.
    En revanche, la Deserialization est, elle, beaucoup plus lente (7 à 8 secondes), à tel point qu'elle perd tout son intérêt, car mon programme de base charge mon objet plus rapidement.

    Voici mon code de Serialization :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // Serialization de l'objet toto
    IFormatter formatter = new BinaryFormatter();
    Stream stream = new FileStream(path + file, FileMode.Create, FileAccess.Write, FileShare.None);
    formatter.Serialize(stream, toto);
    stream.Close();
    Et mon code de Deserialization :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // Deserialization
    IFormatter formatter = new BinaryFormatter();
    Stream stream = new FileStream(path + file, FileMode.Open, FileAccess.Read, FileShare.Read);
    MyObject toto = (MyObject)formatter.Deserialize(stream);
    stream.Close();
    Est-ce normal ? Y a t-il un moyen de réduire ce temps de Deserialization ?

    Merci d'avance.

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 269
    Par défaut
    Bonjours

    Une question me viens, tu dis
    à tel point qu'elle perd tout son intérêt, car mon programme de base charge mon objet plus rapidement.
    Que souhaites-tu faire? un clone?

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 72
    Par défaut
    Mon programme remplit l'objet "toto" en parcourant un fichier. Cela prend 5 secondes, voire plus, suivant la taille du fichier.
    En utilisant la Serialization, j'espérais sauvegarder mon objet "toto" à la fin de l'exécution du programme, pour que lors d'une prochaine exécution, on n'ait pas besoin de parcourir à nouveau le fichier, mais simplement de Deserializer notre objet, dans le but de gagner du temps.
    Mon problème est donc que la Deserialization ne me fait pas gagner de temps, au contraire...

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 72
    Par défaut
    Je tiens à préciser qu'après avoir fait des recherches sur le net, j'ai essayé :
    - UnsafeDeserialization au lieu de Deserialization
    - Implémenter ISerializable
    Aucune de ces deux techniques n'a rendu la Deserialization plus rapide.

  5. #5
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Par défaut
    Citation Envoyé par Morgan7469 Voir le message
    En utilisant la Serialization, j'espérais sauvegarder mon objet "toto" à la fin de l'exécution du programme, pour que lors d'une prochaine exécution, on n'ait pas besoin de parcourir à nouveau le fichier, mais simplement de Deserializer notre objet, dans le but de gagner du temps.
    J'ai un doute là :
    Tu sérialises à la fin de ton programme pour sauvegarder, ok.
    A l'exécution suivante tu désérialises ? Autrement dis tu LIS ton fichier xml (j'imagine).
    J'ai l'impression que tu n'as pas bien compris ce qu'était la (dé-)sérialisation.
    Le plus simple pour toi : au démarrage tu charges tes élements depuis ton fichier. Ensuite tu manipules les objets en mémoire. Au moment choisi tu sauvegardes. Tu as une lenteur auchargement et après ça roule !

    Ensuite, si tu fais un fichier xml, c'est peut-être pratique, mais pas le plus performant du monde. Peut-être faut-il envisager une autre source de données (ne serait-ce qu'un simple fichier, voir à champs taille fixe)

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 72
    Par défaut
    Je pense qu'on m'a mal compris.

    Je sérialise à la fin de mon programme pour sauvegarder l'objet. Ce n'est pas une sérialisation XML mais une sérialisation binaire.
    Lors d'une deuxième exécution, je dé-sérialise pour récupérer l'objet que j'ai sauvegardé (ce qui m'évite de refaire tous les traitements que j'ai effectué la première fois).

  7. #7
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Par défaut
    Donc tu as une lenteur à la lecture de ton fichier Binaire, c'est ça ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Convolution trop lente...
    Par progfou dans le forum Traitement d'images
    Réponses: 6
    Dernier message: 05/08/2006, 11h44
  2. [Eclipse] Editeur de code trop lent
    Par Benzeghiba dans le forum Eclipse Java
    Réponses: 6
    Dernier message: 10/11/2005, 14h02
  3. boucle while trop lente
    Par atouze dans le forum Access
    Réponses: 17
    Dernier message: 15/06/2005, 16h35
  4. [SAGE] ODBC trop lent
    Par tileffeleauzed dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 14/11/2004, 09h56
  5. Envoi de mail trop lent
    Par MASSAKA dans le forum ASP
    Réponses: 3
    Dernier message: 15/10/2004, 10h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo