Page 1 sur 1
remplir une ListIconGadget rapidement
Publié : sam. 30/oct./2004 19:25
par Le Soldat Inconnu
Salut,
j'ai une ListIconGadget dans laquelle je charge beaucoup beaucoup de donnée
entre 20000 et 50000 avec des calculs assez lent.
j'ai déjà réussi à déplacer le calcul en dehors du remplissage de la ListIcon
(je fais les calcul uniquement pour les éléments qui s'affiche avec un callBack)
Donc j'ai simplement à remplir mon ListIcon avec des lignes vides.
Mais ça reste très lent.
est-ce que quelqu'un à un truc pour arriver à remplir une liste très vite ?
voici un code pour tester
Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 3.9
;
; Explication du programme :
; Pour faire des programmes de test rapidement, il ne reste qu'a rajouter les gadgets et la gestion des évènements.
; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 300, 300, #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget, "Test") = 0 Or CreateGadgetList(WindowID()) = 0
End
EndIf
ListIconGadget(0, 0, 0, 300, 210, "test", 100, #PB_ListIcon_MultiSelect | #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
For n = 1 To 4
AddGadgetColumn(0, n, Str(n), 30)
Next
Temps = GetTickCount_()
For n = 0 To 20000
AddGadgetItem(0, n, "")
Next
Temps = GetTickCount_() - Temps
TextGadget(1, 0, 250, 100, 15, Str(Temps))
Repeat
Event = WaitWindowEvent()
Until Event = #PB_EventCloseWindow
End
Publié : dim. 31/oct./2004 6:07
par Anonyme2
C'est l'affichage qui prend beaucoup de temps malgré le fait que ça ne s'affiche que lorsque la liste est pleine.
J'ai verrouillé l'affichage et c'est plus rapide
De 8400 environ à 3500 ms
Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 3.9
;
; Explication du programme :
; Pour faire des programmes de test rapidement, il ne reste qu'a rajouter les gadgets et la gestion des évènements.
; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 300, 300, #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget, "Test") = 0 Or CreateGadgetList(WindowID()) = 0
End
EndIf
ListIconHwnd = ListIconGadget(0, 0, 0, 300, 210, "test", 100, #PB_ListIcon_MultiSelect | #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
For n = 1 To 4
AddGadgetColumn(0, n, Str(n), 30)
Next
Temps = GetTickCount_()
UpdateWindow_(GadgetID(0)) ; <-- ici pour afficher la liste vide au départ
LockWindowUpdate_(GadgetID(0)) ; <-- ici
For n = 0 To 20000
AddGadgetItem(0, n, "1")
Next
LockWindowUpdate_(0) ; <-- ici
Temps = GetTickCount_() - Temps
TextGadget(1, 0, 250, 100, 15, Str(Temps))
Repeat
Event = WaitWindowEvent()
Until Event = #PB_EventCloseWindow
End
Publié : dim. 31/oct./2004 15:03
par Le Soldat Inconnu
oui, c'est déjà fait, j'ai oublié de le préciser. Merci quand même
au fait 3500 ms, c'est la temps que je mets sur le 500 mhz de mes parents

C'est quoi ton PC ???
En passant l'exe en priorité haute, on obtiens environ 3s (toujours sur le 500mhz)
mais bon, ça signifie que tous les autres programmes sont ralentis
Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 3.9
;
; Explication du programme :
; Pour faire des programmes de test rapidement, il ne reste qu'a rajouter les gadgets et la gestion des évènements.
; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 300, 300, #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget, "Test") = 0 Or CreateGadgetList(WindowID()) = 0
End
EndIf
ListIconGadget(0, 0, 0, 300, 210, "test", 100, #PB_ListIcon_MultiSelect | #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
For n = 1 To 4
AddGadgetColumn(0, n, Str(n), 30)
Next
UpdateWindow_(WindowID())
Temps = GetTickCount_()
LockWindowUpdate_(GadgetID(0)) ; On vérouille l'affichage
SetPriorityClass_(GetCurrentProcess_(), #HIGH_PRIORITY_CLASS)
For n = 0 To 20000
AddGadgetItem(0, n, "")
Next
SetPriorityClass_(GetCurrentProcess_(), #NORMAL_PRIORITY_CLASS)
LockWindowUpdate_(0)
Temps = GetTickCount_() - Temps
TextGadget(1, 0, 250, 100, 15, Str(Temps))
Repeat
Event = WaitWindowEvent()
Until Event = #PB_EventCloseWindow
End
Publié : dim. 31/oct./2004 15:14
par Anonyme2
Celeron 2GHz, 1G0 de RAM.
J'ai toujours plein de truc ouvert en même temps sans compter tout le bazard en tache de fond.
J'ai essayé directement avec le message LVM_Insertitem mais c'etait encore moins bon

Publié : dim. 31/oct./2004 15:48
par Le Soldat Inconnu
1.8 seconde sur mon AMD 900mhz
Il déconne ton PC ?

Publié : mar. 02/nov./2004 20:27
par Flype
hummmm, çà m'étonne pas tout çà mais et si on cachait le gadget juste avant de le remplir et qu'on le fait réapparaitre juste après.
bilan 580ms comme çà sur un 700mhz et 2220ms avec la technique habituelle.
Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 3.9
;
; Explication du programme :
; Pour faire des programmes de test rapidement, il ne reste qu'a rajouter les gadgets et la gestion des évènements.
If OpenWindow(0, 0, 0, 300, 300, #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget, "Test") = 0 Or CreateGadgetList(WindowID()) = 0
End
EndIf
ListIconGadget(0, 0, 0, 300, 210, "test", 100, #PB_ListIcon_MultiSelect | #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
For n = 1 To 4 : AddGadgetColumn(0, n, Str(n), 30) : Next
total = 10000
;----
HideGadget(0,1)
Temps1 = GetTickCount_()
For n = 0 To total
AddGadgetItem(0, n, "test")
Next
Temps1 = GetTickCount_() - Temps1
HideGadget(0,0)
;----
ClearGadgetItemList(0)
;----
Temps2 = GetTickCount_()
For n = 0 To total
AddGadgetItem(0, n, "")
Next
Temps2 = GetTickCount_() - Temps2
;----
TextGadget(1, 0, 250, 100, 15, Str(Temps1))
TextGadget(2, 0, 268, 100, 15, Str(Temps2))
Repeat : Until WaitWindowEvent() = #PB_EventCloseWindow
End
Publié : mar. 02/nov./2004 20:31
par Chris
190 dans le premier cas, 1015 dans le second sur un portable en 800 Mhz
Y a pas photo

Publié : mar. 02/nov./2004 20:41
par Le Soldat Inconnu
Génial
je teste et j'obtiens : 550 ms sur le 500mhz de mes parents
Merci Flype
Publié : mar. 02/nov./2004 21:17
par nico
Avec mon Athlon 1.5, j'obtiens 60 et 3656
et pour un total de 100.000 : 1853 et 37084

Publié : mer. 03/nov./2004 7:35
par Anonyme2
Ce matin sans trop de prog ouverts en même temps j'ai 47 et 4187

Publié : mer. 03/nov./2004 11:59
par Backup
moi j'obtien 32 et 328
avec 42 process , mais je sais pas a quoi correspondent ces chiffres !

Publié : mer. 03/nov./2004 21:02
par Flype
impressionnant hein
pour dobro:
ca concerne le temps qu'il faut à un ListIconGadget
pour lui ajouter 20000 lignes :
1ere valeur = x millisecondes - gadget caché - HideGadget(0,1)
2eme valeur = x millisecondes - gadget visible - HideGadget(0,0)
Publié : jeu. 04/nov./2004 11:38
par Fred
Interessant
