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 d'exécution de fopen et fclose [Non suivi]


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Par défaut Temps d'exécution de fopen et fclose
    Bonjour a tous !

    Je me demande quelque chose, dans mon application, je dispose de 3 répertoires contenant des fichiers textes. 2 de ces répertoires contiennent 100 fichiers témoins et le dernier contient 150 fichiers à analyser .

    L'algo ressemble a ça :

    Pour chaque fichier f du répertoire de fichiers a analyser Faire
    Ouvrir fichier du 1er répertoire témoin
    Ouvrir fichier du 2nd répertoire témoin
    ... traitement ...
    Fermer(fichier du 1er répertoire)
    Fermer(fichier du 1er répertoire)

    En gros, ce que j'essaye de dire, c'est que j'ouvre et je ferme les fichiers témoins 150 fois. Et mon problème c'est que ça prend beaucoup de temps a l'exécution, donc je me demandais, si en ouvrant une seule fois les fichiers et en les fermant tous d'un coup je gagnerai beaucoup de temps? (Au lieu d'ouvrir et de fermer 150 fois...) . Je ne l'ai pas encore fait, car faudrait modifier une grosse partie du code, et avant de ma lancer je préfère avoir des avis.

    Merci .

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    ça ça ne devrait sans doute pas changer grand'chose mais 1 question :

    Que veux-tu faire exactement ????

    Parce que ouvrir et fermer 100 fichiers (et en plus le faire à chaque fichier à traiter) me semble une erreur de conception... . Ou d'organisation...

  3. #3
    Membre éclairé Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Par défaut
    Hmmm c'est pas tout a fait une erreur de conception. J'ai été obligé de faire comme ça, parce que je me sert d'un algo de compression (LZW) que j'ai récupéré sur le net, et qui prenait en entrée le nom du fichier a compresser et non pas le FILE *. Du coup l'algo de compression prend le nom, ouvre le fichier, fait le traitement, et le ferme. C'est pour ça... Donc je me demande si ça vaut le coup de modifier ce code pour qu'il prenne en entrée directement le FILE *. Mais bon le code fait peut être 700~800 lignes, donc ça m'emm..... de le modifier si au final, je ne gagne pas beaucoup niveau temps d'exécution.

    [Edit] Et puis au début, je ne devais pas tester autant de fichier (150 ) d'un coup, mais plutot une dizaine ou vingtaine [/Edit]

  4. #4
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par GyZmoO
    Donc je me demande si ça vaut le coup de modifier ce code pour qu'il prenne en entrée directement le FILE *.
    C'est impossible. As-tu bien compris ce qu'est un pointeur ?

  5. #5
    Membre éclairé Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Par défaut
    Comment ça c'est impossible????

    J'ai une fonction de ce style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void fun(char *fileName)
    {
       ...
      fd =    fopen(fileName);
      if (fd != NULL)
         {
           blabla;
         }
     
      fclose(fd);
    Je peux faire en sorte qu'elle devienne comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void fun(FILE *fd)
    {
       blabla;
    }
    Et c'est la fonction appelant qui s'occupe de l'ouverture/fermeture du fichier !!

  6. #6
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par GyZmoO
    Comment ça c'est impossible?
    Ah, j'avais compris que tu voulais passer un pointeur sur FILE en argument de ligne de commande. En interne, evidemment, c'est possible. Desole pour cette erreur.

    Pour ton probleme, si tu as N fichiers a traiter, tu dois faire N fopen() et N fclose(). Par contre, si la fonction ouvre le fichier, n'en traite qu'une partie, le referme pour refaire la meme chose plus tard, sur le meme fichier, alors il est preferable de laisser le fichier ouvert. Ceci dit, il faudrait identifier la portion de code qui coute cher avant de faire des optimisations. Peut etre que c'est le traitement (operations d'I/O comprises) qui est long, auquel cas le cout d'un fopen/fclose est negligeable.

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par GyZmoO
    Et c'est la fonction appelant qui s'occupe de l'ouverture/fermeture du fichier !!

    ça changera strictement rien....

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    et tu es sous quelle plateforme ??

    800 lignes et tu trouves que c'est trop gros pour regarder à modifier ?????

  9. #9
    Membre éclairé Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Par défaut
    Win xp. Mais non je sais bien que c'est pas grand chose, c'est juste que j'ai une dead line qui se rapproche relativement vite !!! Donc vous pensez que ça serait une bonne chose que j'ouvre tous les fichiers d'un coup, que je fasse tous les traitements, et que je ferme tous d'un coup? (Biensur c'est une bonne chose de faire comme ça) Mais je vais y gagner beaucoup de temps ou ça va être invisible????

Discussions similaires

  1. Réponses: 9
    Dernier message: 20/06/2005, 12h17
  2. [C#] Calcul du temps d'exécution.
    Par lozzko dans le forum Windows Forms
    Réponses: 4
    Dernier message: 12/06/2005, 16h12
  3. Réponses: 2
    Dernier message: 25/05/2004, 15h33
  4. Affichage du temps d'exécution d'une requête
    Par milka dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 22/03/2004, 17h48
  5. Temps d'exécution des instructions FPU
    Par ubi dans le forum Assembleur
    Réponses: 2
    Dernier message: 24/10/2003, 18h39

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