TreeView (VB5)

TomIlliev Messages postés 86 Date d'inscription vendredi 27 décembre 2002 Statut Membre Dernière intervention 13 octobre 2016 - 30 déc. 2005 à 22:39
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 - 3 janv. 2006 à 13:13
Bonjour, Bonjour...

Voilà, je suis en train de faire une gestion de CD d'archives...

J'enregistre dans un fichier texte, l'arboresence d'un CD de sauvegarde de données.
Certain fichiers font jusqu'a 550 Ko.
Chaque ligne du fichier contient une ligne comprenant le chemin complet de chaque fichier du CD exemple: D:\Basic\Archive\Source\Archive.vbp
D:\Basic\Archive\Source\Archive.frm
...Etc...
...Etc

Ensuite je relis le fichier et je l'affiche dans un treeview son contenu, mais lorsque les fichiers sont
volumineux le processus et trés lent (plusieurs minutes pour un fichier de 512 ko sur un 900 Mgz).

Questions:
1) Existe-t-il un moyen de desactiver le rafraichissement du treeview pendant son chargement avec API ?
2) Quelqu'un a-t-il une idée pour accélerer le chargement dans le treeview. (formatage du fichier au monent de sa création)

Je suis prenneur de toutes combines

merci, Tomilliev

4 réponses

crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
30 déc. 2005 à 22:58
Pour accelerer le chargement des nodes d'une treeview il faut rendre celui-ci invisible. Un petit coup de treeview1.Visible = False avant de remplir les nodes puis un coup de Treeview1.Visible = True.
tu pourras constater que rien que cela, c'est relativement spectaculaire comme progrès (du moins, c'est ce que j'ai personnellement déjà expériomenter)
Ensuite, ce n'ets peut-être pas spécifiquement sur le chargement de ta treeview qu'il faut travailler mais plus sur la leture de ton fichier ... tu le lis ligne par ligne ? Car la, c'est effectivement plus long qu'une lecture d'un seul bloc [Buffer = Input(Lof(1),1)]
ensuite tu peux éclater ce buffer ligne par ligne dans un tableau avec la fonciton Split() et ensuite parcourir ton tableau. Avec ca, cela devrait etre plus rapide qu'une lecture dans le fichier ligne par ligne (= Accès disque pour une ligne, traitement dans la treeview, accès disque , traitement treeview, accès disque , traitement treeview, accès disque , traitement treeview, etc ...) Le disque dur et son controleur n'aiment pas !!!

CR
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
31 déc. 2005 à 10:40
Bonne idée CR, sauf que la fonction Split n'existe pas sous VB5, il faut la recréer à la main, de même que diverses autres fonctions comme Join, Replace, InStrRev, ....

J'ai le code au boulot, dommage j'aurais pu le donner, mais je pense qu'il est présent sur le site, faut faire une recherche dans les sources.

<hr size="2" width="100%">
0
TomIlliev Messages postés 86 Date d'inscription vendredi 27 décembre 2002 Statut Membre Dernière intervention 13 octobre 2016 2
31 déc. 2005 à 12:35
Bonjour,
J'ai suivi les conseils de crenaud76 (Utilisation d'un buffer au lieu du ligne à ligne le Tv not visible augmente un peu la vitesse) mais cela reste trop lent pour charger les 9163 lignes du fichier dans le Tv.

Effectivement le vB5 ne comprend pas de function Split. Donc je me débrouille avec la fonction Instr pour chercher les Chr$(13) qui délimitent chaque ligne.

Avec le Vb5 le controle msFlexGrid a une property "Redraw" qui lorsqu'elle vaut "False" augmente de façon impressionnate la rapidité de chargement.

Pensez-vous qu'il soit possible de déactiver le rafraichissement d'un treeView avec les APIs?

meci pour vos reponses.
Bon Réveillon
Tomilliev
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
3 janv. 2006 à 13:13
La mettre à visible = False est suffisant (meme si cela n'accélère pas assez le code à ton gout !!).
En effet, la chose qui prenne le plus de temps dans ce genre de boucle, c'est le refresh de l'affichage du controle à l'écran. Alors une fois le controle invisible, il ne te reste plus que la mécanique interne d ela collection de nodes du treeview pour ralentir ta boucle ... et ca .. malheureusement, c'est a mon avis intouchable !!

CR

PS : Pour le Split(), je fait toute mes exccuses !! J'avais pas vu que tu l'avais noté dans le titre de ton msg !!! Dire que c'est une des recommandation que j'ai faite récemment sur le forum (voir ici http://www.vbfrance.com/forum.v2.aspx?ID=627915).. j'ai honte !! Pour la peine, je me prive de chocolat ce soir ! Na !
0
Rejoignez-nous