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

Langage Delphi Discussion :

FindFirst trop lent !


Sujet :

Langage Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2009
    Messages : 33
    Points : 25
    Points
    25
    Par défaut FindFirst trop lent !
    Bonjour,

    Dans le programme sur lequel je suis en train de bosser, à un moment, je dois vérifier si des fichiers sont présents sur le DD avant de continuer.

    A priori, rien de compliqué :
    if ((FindFirst(m_Chemin+'*.jpg', $3F,s)=0) then ...

    Mon problème est qu'à froid, cette petite recherche est très lente (~1sec), ce qui est handicapant pour les performances globales (des appels similaires sont réalisés à plusieurs reprises). Les dossiers en question peuvent contenir plusieurs milliers de fichiers, c'est sûrement lié à ça. De plus, ce n'est lent que pour la première utilisation du logiciel, s'il est relancé une seconde fois sans reboot, l'action est quasi-immédiate. J'ai également testé de visiter les dossiers en question avant le lancement du programme, et là aussi ça a été très rapide. Windows (XP) est donc montré du doigt d'après moi.

    Je souhaiterais donc savoir si vous connaissiez des solutions alternatives qui puissent me faire gagner en vitesse. Je peux à la limite lancer un script pour "visiter" ces répertoires en background en prévision des FindFirst.

    Merci !

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 522
    Points : 25 052
    Points
    25 052
    Par défaut
    Regarde le Clic Droit (Menu Contextuel) Propriétés d'un Dossier, tu vois le temps que met l'Explorateur à calculer, ben, FindFirst mets le même temps, j'ai utilisé FindFirst sur des Dossiers de plusieurs Go, contenant des milliers de fichiers tif, je te confirme, cela prend du temps, idem, on utilise un système de numérotation et de découpage de dossier pour que l'on est au plus 1000 sous-dossiers dans un dossier (et cela sur 3 niveaux)

    Tu peux lancer ce calcul dans un Thread dès que tu sais qu'il finira par arriver !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2009
    Messages : 33
    Points : 25
    Points
    25
    Par défaut
    Merci.

    Dans un soucis de compatibilité, je ne peux remettre en cause l'organisation des fichiers. Je me lance du coup dans une sorte de prefetch dans un thread temporaire. Reste à trouver le bon moment pour l'exécuter, mais j'ai ma petite idée.

  4. #4
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    ~1sec pour quelques milliers de fichiers ... ce n'est pas lent.

    faut arrêter un peu de croire que tout peux être fait en moins de 10milli-secondes surtout quand on tente d'accéder à un support physique et mécanique (disque dur, CD/DVD, disquette, cassette à bande).

    Tout dépend de la rapidité de l'accès disque. un disque UDMA affichera un temps plus long qu'un SATA plus long qu'un SATA 2 plus long qu'un SCSI en RAID plus long qu'un disque RAM.

    à l'époque des support sur bande (comme dans DARYL ou War Games) il fallait plusieurs minutes pour lire un fichier de quelques octets, plusieurs heures pour copier ou effacer les données, ou simplement aller lire le tout dernier fichier de la bande.

    donc ne nous plaignons pas pour quelques millisecondes à patienter.

    aprés tu peux effectivement lire avec un thread au coups par coups mais ce sera plus long.
    autant tout lire d'un coups dans un thread et une fois les données en cache tu y accedera plus vite comme tu l'as constaté.

    aprés il faut optimiser le code allentours pour gagner en vitesse de traitement.
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2009
    Messages : 33
    Points : 25
    Points
    25
    Par défaut
    Je reconnais que ~1sec pour des milliers de fichiers ce n'est pas très long.
    Mais avoir des freezes de plusieurs dizaines de secondes ce n'est pas génial au niveau de l'expérience de l'utilisateur final (qui ne se doute pas des causes de ce ralentissement).

    Le Thread marche pas mal. Le temps gagné dépend du temps que l'utilisateur perd en se baladant dans les menus, mais c'est déjà ça de gagné.

  6. #6
    Membre expérimenté
    Profil pro
    chercheur
    Inscrit en
    Avril 2004
    Messages
    830
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Avril 2004
    Messages : 830
    Points : 1 453
    Points
    1 453
    Par défaut
    Citation Envoyé par Hartok Voir le message
    Je reconnais que ~1sec pour des milliers de fichiers ce n'est pas très long.
    Mais avoir des freezes de plusieurs dizaines de secondes ce n'est pas génial au niveau de l'expérience de l'utilisateur final (qui ne se doute pas des causes de ce ralentissement).

    Le Thread marche pas mal. Le temps gagné dépend du temps que l'utilisateur perd en se baladant dans les menus, mais c'est déjà ça de gagné.
    Parce que tu le laisses s'ennuyer. Affiche une belle barre de progression et il sera convaincu que l'ordinateur fait plein de choses super compliquées et il sera rempli d'admiration pour le programmeur
    Ce qui s'énonce clairement se conçoit bien ( Le hautbois)

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2009
    Messages : 33
    Points : 25
    Points
    25
    Par défaut
    Le problème est qu'ils possèdent également une ancienne version moins complexe mais beaucoup plus rapide... Je peux même pas bluffer. ^^

    J'ai viré pas mal de contrôles, la performance semble le critère déterminant...

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 522
    Points : 25 052
    Points
    25 052
    Par défaut
    Citation Envoyé par Nebulix Voir le message
    Parce que tu le laisses s'ennuyer. Affiche une belle barre de progression et il sera convaincu que l'ordinateur fait plein de choses
    ça c'est très pertinent, j'avais un chargement de fenêtre assez long (XML transformé en DFM par XSL, bcp d'onglet, bien un millier de composant parfois, des changements de Owner et tout et tout), et bien entre chaque étape, j'ai mis une progression, même moi, j'ai l'impression que cela va plus vite qu'avant (ce qui est faux, c'est plus lent avec l'affichage) mais l'ordi n'est pas bloqué, il nous parle, ça nous rassure tous !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2009
    Messages : 33
    Points : 25
    Points
    25
    Par défaut
    Sinon, il y a les super barres de progression, avec l'effet de vague. Même immobile, la vague donne l'illusion que ça avance !

  10. #10
    Membre expérimenté
    Profil pro
    chercheur
    Inscrit en
    Avril 2004
    Messages
    830
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Avril 2004
    Messages : 830
    Points : 1 453
    Points
    1 453
    Par défaut
    Citation Envoyé par Hartok Voir le message
    ... une ancienne version moins complexe mais beaucoup plus rapide...
    (soupir)
    Ce qui s'énonce clairement se conçoit bien ( Le hautbois)

  11. #11
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 448
    Points
    28 448
    Par défaut
    Citation Envoyé par Hartok Voir le message
    Merci.

    Dans un soucis de compatibilité, je ne peux remettre en cause l'organisation des fichiers. Je me lance du coup dans une sorte de prefetch dans un thread temporaire. Reste à trouver le bon moment pour l'exécuter, mais j'ai ma petite idée.
    d'où viennent les images ? ne peux-tu avoir un fichier texte qui contient la liste des fichiers ?
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2009
    Messages : 33
    Points : 25
    Points
    25
    Par défaut
    Merci pour vos messages, mais c'est Résolu. ^^

    Je peux avoir un fichier texte, mais l'intérêt ici était de contrôler si tout était bien présent connaissant les emplacements théoriques. J'ai remplacé ce contrôle par un autre moins gourmand.

+ 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