Recherche de fichier en Multi-Thread

Signaler
Messages postés
30
Date d'inscription
dimanche 24 septembre 2006
Statut
Membre
Dernière intervention
5 juillet 2011
-
Messages postés
30
Date d'inscription
dimanche 24 septembre 2006
Statut
Membre
Dernière intervention
5 juillet 2011
-
Bonjour à tous !

J'ai besoin de faire des recherches sur des fichiers XML.

Mon problème est que je n'arrive pas à avoir un temps de recherche acceptable lorsque ma recherche porte sur un très grand nombre de fichiers.

J'ai une fonction permettant de déterminer si un fichier correspond à mes critères de recherches ou non,qui lorsque le fichier correspond à la recherche, écrit dans un XML ouvert en écriture l'adresse du fichier testé.
Cette fonction est lancé via une boucle For sur tous les fichiers à tester.

Tester les fichiers les uns après les autres est donc trop lent, j'ai donc pensé à tester tous mes fichiers en même temps en faisant du multi-Thread, un thread par fichier.

Ce que je pensais faire c'était que ma boucle For me lance à chaque fois un nouveau processus executant ma fonction de test de fichier, me permettant de ne pas devoir attendre le temps du test du fichier à chaque fois.

Cela est-il donc possible ? Si oui comment ? Sinon une autre idée pour optimiser mon temps de recherche(sachant que ma fonction de test a besoin en moyenne de 2 tiers de seconde pour tester un fichier) ?

Merci !

6 réponses

Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
quel genre de critère utilises tu ?

est-ce une opération que tu repètes souvent ?

combien as tu de fichiers ?

je pense qu'il serait préférable de repenser la chose, j'attends certaines précisions avant d'en dire plus.


Renfield - Admin CodeS-SourceS - MVP Visual Basic
Messages postés
30
Date d'inscription
dimanche 24 septembre 2006
Statut
Membre
Dernière intervention
5 juillet 2011

Je test la valeur d'une ou plusieurs balises du XML.

En l'occurrence mon test porte sur 10000 fichiers.

C'est un recherche qui va me servir souvent.
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
ok.
il serait surement preferable de ne pas faire ces recherches en Live.

tu pourrais peut etre construire un catalogue.

un fichier qui permettrait de faire le lien entre tes criteres et les fichiers XML.

quand ces fichiers sont supprimés, mis a jour ou que tu en ajoutes d'autres, tu mets simplement a jour le catalogue.

quand tu cherche des correspondances, manipule ton catalogue qui t'indiquera directement les fichiers a exploiter.

après, c'est l'idée générale, à toi d'étudier la chose par rapport a tes fichiers ^^



Renfield - Admin CodeS-SourceS - MVP Visual Basic
Messages postés
30
Date d'inscription
dimanche 24 septembre 2006
Statut
Membre
Dernière intervention
5 juillet 2011

Autrement dit tu me propose d'indexer les fichiers.

Mais je ne peux pas faire cela, les fichiers étant modifier de manière extérieure, mon logiciel est lancé ponctuellement alors il faudrait que je met à jour le catalogue à chaque fois,et que chaque fichier contient un nombre important d'information qu'il faudrait que je recense, et qui aurait pour résultat "un catalogue" bien trop important je pense.

Pourquoi ma solution te dérange-t-elle ?
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
tu compte pas lancer 10.000 threads en même temps, tout de même ^^

modifiés de manière exterieure...
donc ne recatalgouer que ceux qui ont été modifiés depuis telle date.


après, a voir le volume d'info a indexer...

le tout est de bien afficher une barre de progression, etc.
qu'on ait une idée du temps restant pour trouver nos fichiers.

Renfield - Admin CodeS-SourceS - MVP Visual Basic
Messages postés
30
Date d'inscription
dimanche 24 septembre 2006
Statut
Membre
Dernière intervention
5 juillet 2011

Effectivement 10 000 thread en même temps ça peut être problematique

L'indexation ne me convient vraiment pas, car le lieu de recherche n'est pas du tout défini... Et de plus est elle peut s'effectuer sur un poste en réseau...

Il ne me reste plus qu'à améliorer les informations de ma barre de progression alors ...

Merci quand même !