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 :

temps de lecture d'un grand fichier


Sujet :

C++

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 35
    Par défaut temps de lecture d'un grand fichier
    Bonjour,

    je souhaite savoir approximativement combien de temps sera nécessaire pour lire un fichier text contenant 28 000 000 données de type double.

    Pour ma part je le fais en 185 seconds; est ce normal? ou il est possible d'améliorer ce temps?

    merci

  2. #2
    Membre très actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 685
    Par défaut
    Citation Envoyé par nadir CoCo Voir le message
    Bonjour,

    je souhaite savoir approximativement combien de temps sera nécessaire pour lire un fichier text contenant 28 000 000 données de type double.

    Pour ma part je le fais en 185 seconds; est ce normal? ou il est possible d'améliorer ce temps?

    merci
    Est-ce que tu fais un affichage des données lues au passage ? Parce que l'affichage (sur sortie standard en tout cas) augmente sérieusement le temps d'exécution d'un programme. Je n'ai pas fais de tests ni rien pour te dire, mais à mon avis, c'est long oui (mais une supposition ne vaut rien^^)

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 35
    Par défaut
    non, j'ai pas afficher les données puisque j'avais deja essayé et ça preait un temps fous,,,,,200 sec c'est son afffichage, mais je sais pas si je peux améliorer encore ce temps

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Par défaut
    Avec 28M de données, ça ne vaudrait pas le coup d'utiliser une base de données comme SQLite ?

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 35
    Par défaut
    En fait, il m'est demandé de travailler avec le C++ que je viens de me familiariser avec. Enfin j'essayerai de faire cette proposition a mon chef.
    Sinon, y a pas moyen d'améliorer ce temps en C++?

    merci

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Par défaut
    SQLite est une bibliothèque C/C++ qui au lieu de travailler sur un .txt comme tu le fais, crée son propre fichier .sqlite ou .db selon un format qui devrait a priori faciliter/accélérer la récupération de données.

    La plupart des navigateurs web gèrent d'ailleurs leurs données avec SQLite pour accélérer les échanges.

  7. #7
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Je ne pense pas qu'utiliser une BdD permettrait d'aller plus vite pour lire des données... C'est optimisé pour faire des recherches, des jointures... mais pas lire de la donnée brute.

    Sinon, pour répondre à tes questions de vitesses :
    - Quel est le format de fichier ? Textuel ou binaire ?
    - Es-tu maître du format de fichier ?
    - Y a-t-il beaucoup de données identiques, ce qui permettrait d'envisager une compression qui accélèrerait la lecture ?
    - Es-tu obligé de tout lire
    - Dois tu faire du code portable ? (par exemple les lectures de données asynchrones de windows peuvent accélérer grandement le temps de lecture + traitement dans certains cas)
    - Une fois lues, que fais-tu des données, est-ce que tu les mets dans un conteneur ? De quel type ?
    - Sur quel support physique sont tes données ?

    Mais de base, je ne suis pas impressionné par la vitesse que tu indiques. Il doit être possible de faire mieux.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 35
    Par défaut
    Bonjour, merci pour vos réponses,

    les réponse à vos questions sont:
    . J'utilise des fichiers de format text (.txt), mais si utiliser un autre format me permettra d'obtenir une meilleur vitesse je suis preneur.
    . En se qui concerne les données, elle sont généralement différentes, mais on peut tomber sur quelques unes qui se ressemblent bien sur.
    . Pour la lecture, oui toutes les données doivent être lues.
    . Pour la portabilité du code , y a pas de conditions.
    . Une fois lues, je dois récrire les données dans un fichier de sortie sous format (text.txt).
    . les données sont sur le disk dur de mon PC.

    meerci d'avance pour vos propositions.

  9. #9
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Citation Envoyé par nadir CoCo Voir le message
    J'utilise des fichiers de format text (.txt), mais si utiliser un autre format me permettra d'obtenir une meilleur vitesse je suis preneur.
    Le choix d'un format binaire devrait grandement améliorer le résultat. Déjà parce que les données seront moins volumineuses, mais en plus il n'y a pas le coût d'interprétation de string vers double.

    Si tu passes à un format binaire, je te conseille d'écrire dans un en-tête fixe au début du fichier des infos sur les données qu'il contient. Par exemple, le nombre de doubles doit être stocké pour être utilisé à la lecture.

  10. #10
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    À noter aussi, si tu passes à un fichier binaire (ce qui devrait largement améliorer les perfs), qu’il faut que tu te préoccupes de l’endianness si tu veux être portable, ainsi peut-être que de la taille des double (je ne crois pas que quoi que ce soit impose qu’ils soient de 8 bits, néanmoins je n’ai pas en-tête de cas où ce n’est pas le cas).

    Sinon, 28 millions de double, ça devrait te faire un fichier d’un peu plus de deux centaines de mégas.

    Pour information, le débit d’un disque dur moderne est sans problème supérieur à 50Mo/secondes. Ta lecture devrait donc prendre dans les 4-5 secondes (attention toutefois au cache, qui va largement t’accélérer cela si tu répètes le test). Par exemple, chez moi je lis ça en moins d’une seconde.

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 35
    Par défaut
    D'accord et merci pour vos suggestions,

    mais tant que vous me proposer d'utiliser des fichiers binaire (.bin), comment puis-je transformer mes fichiers (.txt) en (.bin)?

    je pense que c'est faisable en C++, mais en tous les cas je dois lire mon fichier (.txt) ^^. Ou y a t'il une autres possibilité?

    En tous cas vous m'aviez bien aider jusque la, un grand merci à vous

  12. #12
    Membre émérite
    Avatar de mitkl
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 364

  13. #13
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 35
    Par défaut
    merci

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

Discussions similaires

  1. Optimiser le temps de lecture d'un gros fichier
    Par wassim_boy dans le forum Entrée/Sortie
    Réponses: 20
    Dernier message: 29/12/2011, 19h37
  2. [XPATH 1.0] Temps de lecture d'un "gros" fichier XML
    Par Ikki_2504 dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 14/01/2011, 18h27
  3. [debutant]lecture des grands fichiers
    Par djaval0221 dans le forum Débuter
    Réponses: 1
    Dernier message: 21/02/2008, 14h11
  4. Réponses: 44
    Dernier message: 10/10/2007, 10h23
  5. Réponses: 2
    Dernier message: 24/04/2007, 22h03

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