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

SL & STL C++ Discussion :

Performances en lecture d'un fichier (std::getline)


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2004
    Messages : 219
    Par défaut Performances en lecture d'un fichier (std::getline)
    Bonjour,

    J'ai besoin de lire et parser un fichier d'une taille de 11 Mo contenant 180 000 lignes.
    J'ai utilisé le code suivant pour effectuer un test de temps de lecture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    std::ifstream geomFile(name);
    std::string myLine;
    while(std::getline(geomFile, myLine));
    Cela prend environ 5 secondes.
    Je trouve cela un peu lent et je voulais savoir si c'est normal que ce soit aussi lent ou bien si cela vient de la fonction getline(), du compilateur visual c++6 ou autre chose...
    Merci.

    PS : mon ordinateur est récent.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut
    as-tu essayé avec d'autres fonctions ?
    fonctions C --> fgets() par exemple ... pour comparer les perf ?

    @+

  3. #3
    Invité
    Invité(e)
    Par défaut
    il y a peut etre d'autres solutions ; cela dépend de ce que tu veux faire du contenu du fichier...

    par exemple, lire le fichier en entier, brut de brut, et compter le nombre de '\n'...

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2004
    Messages : 219
    Par défaut
    J'ai pas trop envie de retourner au langage c et les char * mais bon s'il faut ça pour les performances ...

    Le fichier il faut que je le lise en entier, parce que c'est un fichier de géométrie 3D que je charge dans une structure de données.
    Je me pose la question de lire tout d'un coup dans un buffer mais c'est peut être un peu bourrin.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par TheSeb
    Je me pose la question de lire tout d'un coup dans un buffer mais c'est peut être un peu bourrin.
    la meilleure facon de comparer les performances, outre de comparer l'assembleur généré, c'est encore de tester...

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Le problème des performances en lecture d'un fichier est multiple:

    En vrac, et rien qu'au niveau du matériel, on peut estimer que cela peut dépendre de la position du fichier par rapport aux tetes de lecture du disque (si le fichier se trouve sur "le bord du disque" et les tete de lecture "au centre"), de son degré de fragmentation éventuelle, de la rapidité de rotation du disque, de sa disponibilité ou non dans un cache quelconque, d'un acces "direct" au fichier (il est physiquement sur le disque dur de l'ordinateur au départ duquel on tente d'y accéder) ou non, des autres acces au disque nécessités par d'autres applications...

    Ensuite, de fait, cela peut etre du au programme lui-même, mais, en tout état de cause, tu ne dois pas te baser sur "la premiere lecture" du fichier en question...

    Il y a fort à parier que, si tu faisait une boucle qui appelle la lecture totale du fichier, et que tu l'appelais un nombre suffisant de fois, tu verrais un "temps de lecture moyen" tres largement inférieur, meme en utilisant le meme compilateur...

    Enfin, il n'est pas exclu qu'un compilateur puisse créer un code exécutable plus "propre" ou "plus efficace" qu'un autre... mais là, encore une fois, il faudrait faire une batterie de tests, dans des conditions similaires, pour s'en assurer...

    Sois aussi attentif au fait que, dans les 5 secondes, tu ne précise pas si le temps de (re)compliation ou le délais entre la (re)compilation et le lancement effectif de l'application sont comptés...

    Enfin, il faut être particulièrement prudent... S'agit-t-il d'un "délais estimé" ou d'un délais calculé précisément (parfois, une seconde, ca parrait vraiment long )
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  7. #7
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par toxcct
    la meilleure facon de comparer les performances, outre de comparer l'assembleur généré,
    Pour des IO, comparer l'assembleur ne me semble pas etre une bonne methode.

    c'est encore de tester...
    C'est mieux que de comparer l'assembleur.

Discussions similaires

  1. Comment mesurer les performances des I/O (lecture d'un fichier XML)?
    Par LGnord dans le forum Tests et Performance
    Réponses: 2
    Dernier message: 08/11/2011, 11h39
  2. PB de performance de lecture d'un fichier :
    Par ksper45 dans le forum Langage
    Réponses: 5
    Dernier message: 28/08/2008, 15h18
  3. Problème de lecture fichier avec std::getline
    Par marcootz dans le forum C++Builder
    Réponses: 13
    Dernier message: 15/05/2008, 15h42
  4. Performance lors de la lecture d'un fichier excel
    Par Acarp47 dans le forum VBA Access
    Réponses: 3
    Dernier message: 29/08/2007, 19h18
  5. [performance] Lecture d'un fichier
    Par Ceylo dans le forum C
    Réponses: 13
    Dernier message: 30/01/2007, 16h07

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