remplir une ListIconGadget rapidement

Sujets variés concernant le développement en PureBasic
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

remplir une ListIconGadget rapidement

Message 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
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

oui, c'est déjà fait, j'ai oublié de le préciser. Merci quand même :wink:

au fait 3500 ms, c'est la temps que je mets sur le 500 mhz de mes parents 8O
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
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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 8O
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

1.8 seconde sur mon AMD 900mhz

Il déconne ton PC ? 8O
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message 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
Image
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

190 dans le premier cas, 1015 dans le second sur un portable en 800 Mhz

Y a pas photo :lol:
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Génial ;)

je teste et j'obtiens : 550 ms sur le 500mhz de mes parents

Merci Flype
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Avec mon Athlon 1.5, j'obtiens 60 et 3656

et pour un total de 100.000 : 1853 et 37084

:D
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Ce matin sans trop de prog ouverts en même temps j'ai 47 et 4187 :D
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

moi j'obtien 32 et 328

avec 42 process , mais je sais pas a quoi correspondent ces chiffres ! :? :oops:
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

impressionnant hein :P

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)
Image
Fred
Site Admin
Messages : 2808
Inscription : mer. 21/janv./2004 11:03

Message par Fred »

Interessant :)
Répondre