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 :

Optimiser le temps : gros string dans un fichier


Sujet :

C++

  1. #1
    En attente de confirmation mail
    Inscrit en
    Avril 2004
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 83
    Points : 54
    Points
    54
    Par défaut Optimiser le temps : gros string dans un fichier
    Re bonjour,

    Pour mettre un string contenant plusieurs MOs de charactères dans un fichier, j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    monfile << monstring ;
    monfile.close();
    J'aimerai optimiser cette sauvegarde puisque, pour 19MO de char dans mon string, monfile << monstring ; s'execute en 2secondes et monfile.close(); en 0.5secondes. J'aurai à maniper des chaines de chars plus importantes donc ca rique d'être beaucoup plus long
    Y-a-t il un moyen d'effectuer une sauvegarde plus rapide (j'ai essayé fputs et fwrite mais ca n'a pas l'aire mieu) ?

    merci

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Points : 858
    Points
    858
    Par défaut
    Si fwrite ne fait pas mieux c'est que c'est l'écriture sur disque en elle même qui prend du temps. 19MO en 2.5s ça semble être une performance normale pour un disque dûr. Je crains qu'il n'y ai rien à faire.

  3. #3
    Membre éclairé Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Points : 844
    Points
    844
    Par défaut
    Au mieux ce que tu peux faire c'est une écriture asynchrone pour laisser ton programme tourner pendant que l'écriture dans le fichier se fait en parrallèle par ton OS.
    Avant de poster un message .
    Quand vous avez la réponse à votre question, n'oubliez pas de cliquer sur .

  4. #4
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut
    au lieu de tout ecrire un coup tu peux pas segmenter tout ca ?
    Hiko-seijuro

    n'cha - hoyoyo gang

    espace perso : http://hiko-seijuro.developpez.com
    dernier tuto : Introduction à l'éditeur de texte Emacs sous linux
    consulter les faqs : http://www.developpez.com/faq
    PAS DE QUESTIONS TECHNIQUES PAR MP OU MAIL

  5. #5
    Membre éclairé Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Points : 844
    Points
    844
    Par défaut
    Le mieux que tu puisses faire (mais ça va juste accélérer un iota), c'est d'utililser des stream bufferisé et de mettre un taille de buffer double de la taille du buffer de ton disque.
    Avant de poster un message .
    Quand vous avez la réponse à votre question, n'oubliez pas de cliquer sur .

  6. #6
    Membre confirmé Avatar de toxcct
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 434
    Points : 511
    Points
    511
    Par défaut
    j'aimerais bien savoir tout de meme comment tu as fais tes mesures de performances ?
    besoin de réponses ? demande a un pote

  7. #7
    En attente de confirmation mail
    Inscrit en
    Avril 2004
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 83
    Points : 54
    Points
    54
    Par défaut
    J'ai Mesuré les perfs avec des QueryPerformanceCounter.

    Sinon, en quoi cela va-t-il améliorer les perfs de segmenter mon message ?

    L'écriture en asynchrone,c'est faire ca avec un thread ?

    Merci

  8. #8
    Membre éclairé Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Points : 844
    Points
    844
    Par défaut
    Non pour l'écriture asynchrone, Windows fait ça tout seul.

    Pour ça il faut utiliser CreateFile & WriteFile avec le flag FILE_FLAG_OVERLAPPED.
    Avant de poster un message .
    Quand vous avez la réponse à votre question, n'oubliez pas de cliquer sur .

Discussions similaires

  1. Réponses: 7
    Dernier message: 01/09/2006, 14h19
  2. Ecriture d'un string dans un fichier
    Par spoown dans le forum C
    Réponses: 16
    Dernier message: 13/07/2006, 09h29
  3. remplacer les String dans un fichier
    Par makohsarah dans le forum Langage
    Réponses: 3
    Dernier message: 29/05/2006, 13h34
  4. Enregistrer le temps d'excution dans un fichier
    Par Ickou dans le forum Linux
    Réponses: 8
    Dernier message: 02/03/2006, 16h24
  5. Comment enregistrer une string dans un fichier
    Par Dnx dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 23/09/2005, 14h52

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