wxDev.fr, le portail francophone consacré à wxWidgets ! ( The french portal for wxWidgets )  
Esp. membre
Recheche rapide



Recherche avancée
Statistiques
Membres inscrits :599

Membres en ligne : 0
Invités en ligne : 10
Pub hébergeur
Pourquoi cette pub ?

Valid XHTML 1.0 Transitional

Valid CSS2

Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Utilisation générale wxWidgets
» Recuperer la date de modification d'un fichier -> Optimisation ?
Conversation : Recuperer la date de modification d'un fichier -> Optimisation ?
29-01-2010 11:04:13  Recuperer la date de modification d'un fichier -> Optimisation ? #1
Patou (Nouveau membre)
Inscrit le : 29-01-2010
Messages: 3
Snippets: 0
Tutoriels: 0
Hors ligne
Bonjour à tous !

Je me suis remis recemment a wxWidgets pour un petit projet permettant de synchroniser les fichiers entre 2 repertoires.

Pour cela je parcoures l'arborescence du repertoire via un object wxDir en notant la date de modification de chaque fichier afin de comparer cette date avec le meme fichier de l'autre repertoire...

La date de modification d'un fichier est recupérée en utilisant wxFileModificationTime, j'ai egalement essayé wxFileName::GetModificationTime, mais le constat est le meme, cette fonctionnalite ralentie horriblement le programme !
On passe de quelques secondes d'execution si je desactives cette fonctionnalite, a plusieurs minutes quand elle est activée !
Pourtant d'autres programmes de synchronisation sont bien plus rapide et font la meme chose...
Je m'y prends si mal que ca ?
A noter qu'une fois le repertoire est parcouru, la prochaine analyze est quasi instantanée, comme si un cache était utilisé...

Merci d'avance pour vos lumieres !
Patou
29-01-2010 12:56:46  Re: Recuperer la date de modification d'un fichier -> Optimisation ? #2
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1147
Snippets: 23
Tutoriels: 6
Site web
Hors ligne
Le fait que l'exécution soit ralentie est normal (il y a un accès à chaque fichier en plus).
Mais apparemment, la différence est énorme.
Est-ce qu'il y a beaucoup de fichiers à traiter ?

Quelle méthode utilises-tu pour parcourir l'arborescence du répertoire à synchroniser ? wxDir::Traverse, wxDir::GetAllFiles ou wxDir::GetFirst / wxDir::GetNext ?

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà...
29-01-2010 15:07:45  Re: Recuperer la date de modification d'un fichier -> Optimisation ? #3
Patou (Nouveau membre)
Inscrit le : 29-01-2010
Messages: 3
Snippets: 0
Tutoriels: 0
Hors ligne
Bonjour Xaviou,

Merci pour ta reponse !
La difference est enorme, c'est dans le cas ou il y a plusieurs milliers de fichiers a traiter.

Je parcours l'arborescence avec wxDir::GetFirst / wxDir::GetNext, pour la recréer en memoire, afin d'analyser ensuite les changements (fichiers supprimes, modifiés, etc..) et cette partie est assez rapide si au lieu de de recuperer la date de modification je créé un wxDateTime avec le constructeur par defaut par exemple.

J'ai teste une autre methode avec un appel a ::CreateFile et ::GetFileTime (sous windows :D), mais le probleme reste entier...
Quand je vois d'autres outils qui lisent la meme arborescence en quelques secondes, je me dis qu'il doit bien y avoir un moyen ! :p
Et ce qui est surprenant c'est qu'une fois l'arborescence lue, si j'effaces et que je recommences, ca ne prendra plus quelques minutes, mais seulement quelques secondes ! C'est toujours la premiere lecteure apres branchement du disque externe, mais comme on fait rarement plusieurs synchronisations de suite c'est aussi la plus importante !
----------
Re-Bonjour à tous !

Bon, je me réponds tout seul :D

En fait, la solution qui fait appel a ::CreateFile et ::GetFileTime sous windows fonctionne très bien !

J'ai mal copié le nom dans mon #ifdef, du coup ce code n'etait jamais compilé... Bravo Patou, bien joué ! :stupid:

Par contre, pas encore de solution pour les autres OS.

Patou

Dernière modification par Patou (29-01-2010 19:41:36)

29-01-2010 22:46:49  Re: Recuperer la date de modification d'un fichier -> Optimisation ? #4
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1147
Snippets: 23
Tutoriels: 6
Site web
Hors ligne
J'ai jeté un coup d'oeil aux sources de FreeFilesSync qui est une application de synchronisation de dossiers codée avec wxWidgets.

Apparement, ils n'utilisent pas les fonctions wxWidgets pour lire la date de modification d'un fichier.
Je pense même qu'ils utilisent la lib "boost" pour cela.

Il y a malgré tout une utilisation de ::GetFileTime pour Windows (et un équivaent pour Linux), mais ça ne concerna pas directement la comparaison des fichiers : uniquement les dossiers.
Tu peux quand même vérifier si ça te chante... (fichier shared\fileHandling.cpp, méthode FreeFileSync::copyFileTimes).

Si tu trouves une méthode vraiment efficace, rapide, et éventuellement portable, tu peux toujours nous en faire profiter... ;)

@+
Xav'

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà...
30-01-2010 13:02:42  Re: Recuperer la date de modification d'un fichier -> Optimisation ? #5
Patou (Nouveau membre)
Inscrit le : 29-01-2010
Messages: 3
Snippets: 0
Tutoriels: 0
Hors ligne
Bonjour Xaviou, merci beaucoup pour tous ces efforts !

Il se trouve que j'avais regardé dans ce même code aussi, pour voir comment ils s'y prenaient, puisque ce programme est très rapide à l'éxecution, et c'est de là que j'avais repris l'utilisation de ::CreateFile et ::GetFileTime (bouh le vilain copieur !) pour windows.

Leur code est un mélange de boost, de wxWidgets, et il y a même des appels dépendants de l'OS  à tout bout de champ qui sont cloisonnés via des instructions au préprocesseur (#ifdef _OS_MACHIN_, etc...), mais au moins c'est très efficace :p

Dommage qu'il n'y ai pas de solution 100% wxWidgets qui soit aussi performante.
Pour le moment je vais déjà terminer l'appli, je tacherais ensuite de trouver une solution efficace pour tous les OS.
Je n'oublierais pas de vous en faire part !

Encore merci pour ton aide Xaviou, et à très bientôt je penses :D

Bon week end à tous !
Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Utilisation générale wxWidgets
» Recuperer la date de modification d'un fichier -> Optimisation ?