Page 1 sur 1
Accélérer le remplissage d'une listicongadget
Publié : jeu. 23/mai/2019 18:12
par Stefou
Bonjour à tous et merci de me lire
J'aimerais remplir une lisicongadget avec beaucoup d'élément +de 5000 lignes(pièces d'un magasin d'atelier)
Mais voilà cela peut vraiment être long....
Si vous savez comment accélérer ce processus, je vous remercie de m'aider.
Code : Tout sélectionner
Procedure GadgetEvent()
Select EventGadget()
Case 2
For i=1 To 1000
AddGadgetItem(1, -1, "ID"+i+Chr(10)+"I like to do this faster!")
AddGadgetItem(1, -1, "ID"+i+Chr(10)+"If you know how to do that...think you to help me :-)")
AddGadgetItem(1, -1, "ID"+i+Chr(10)+"J'aimerais accélérer l'affichage d'une longue liste!!!")
AddGadgetItem(1, -1, "ID"+i+Chr(10)+"Si vous savez comment faire...Merci de m'aider")
Next
EndSelect
EndProcedure
If OpenWindow(0, 100, 100, 600, 600, "ListIcon Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ButtonGadget(2,5,2,100,20,"Go")
ListIconGadget(1, 5, 25, 590, 565, "ID", 100, #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
AddGadgetColumn(1, 1, "NOM", 250)
BindEvent(#PB_Event_Gadget, @GadgetEvent())
EndIf
Re: Accélérer le remplissage d'une listicongadget
Publié : jeu. 23/mai/2019 22:23
par Ar-S
Salut Stephou.
J'ai testé avec 5000 entrées. Sur un i5 6600K je mets 1.5 sec pour tout afficher... Je trouve pas que ce soit spécialement long !?
Du as désactivé le débug pour tes tests ?
En cachant la fenêtre pendant le traitement, je gagne cependant la moitié du temps !
Code : Tout sélectionner
Procedure GadgetEvent()
Select EventGadget()
Case 2
HideWindow(0,1) ; essaye avec et sans
start = ElapsedMilliseconds()
For i=1 To 5000
AddGadgetItem(1, -1, "ID"+i+Chr(10)+"I like to do this faster!")
Next
endtime = ElapsedMilliseconds()-start
MessageRequester("",Str(endtime) + " ms",0)
HideWindow(0,0) ; essaye avec et sans
EndSelect
EndProcedure
Re: Accélérer le remplissage d'une listicongadget
Publié : ven. 24/mai/2019 8:57
par falsam
@Ar-s oui c'est rapide avec un exe PureBasic.
Avec Spiderbasic ce même code est généré en JavaScript et il faut environ 4 secondes (
sans debug) pour afficher le résultat.
Petite remarque MessageRequester() n'existe pas avec SpiderBasic
Re: Accélérer le remplissage d'une listicongadget
Publié : ven. 24/mai/2019 9:03
par Ar-S
Oups je n'avais pas vu que l'on était dans la section spider !
Re: Accélérer le remplissage d'une listicongadget
Publié : ven. 24/mai/2019 10:42
par falsam
Une solution avec une gestion d'un timer.
Code : Tout sélectionner
Procedure GetDatabase()
Static i
AddGadgetItem(1, -1, "ID"+i+Chr(10)+"I like to do this faster!")
AddGadgetItem(1, -1, "ID"+i+Chr(10)+"If you know how to do that...think you to help me :-)")
AddGadgetItem(1, -1, "ID"+i+Chr(10)+"J'aimerais accélérer l'affichage d'une longue liste!!!")
AddGadgetItem(1, -1, "ID"+i+Chr(10)+"Si vous savez comment faire...Merci de m'aider")
SetGadgetText(3, Str(i * 4) + " / 4000")
i+1
If i > 1000
UnbindEvent(#PB_Event_Timer, @GetDatabase())
RemoveWindowTimer(0, 1)
DisableGadget(2, #False)
EndIf
EndProcedure
Procedure GadgetEvent()
Select EventGadget()
Case 2
DisableGadget(2, #True)
AddWindowTimer(0, 1, 0)
BindEvent(#PB_Event_Timer, @GetDatabase())
EndSelect
EndProcedure
If OpenWindow(0, 100, 100, 600, 600, "ListIcon Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CloseDebugOutput()
ButtonGadget(2,5,2,100,20,"Go")
TextGadget(3, 110, 2, 100, 20, "")
ListIconGadget(1, 5, 25, 590, 565, "ID", 100, #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
AddGadgetColumn(1, 1, "NOM", 250)
BindEvent(#PB_Event_Gadget, @GadgetEvent())
EndIf
Re: Accélérer le remplissage d'une listicongadget
Publié : ven. 24/mai/2019 19:49
par Ollivier
1) Si, au lieu de mettre -1, vous mettiez un rang précis (1,2,3, etc...), ça économiserait du temps ou pas ?
2) Est-ce que créer 5000 items vides dans un temps initial, puis remplacer les items ensuite, ça ne diminue pas le temps de remplacement ?
Re: Accélérer le remplissage d'une listicongadget
Publié : sam. 25/mai/2019 5:15
par Stefou
Merci les gars pour vos réponses
@Ar-S: je te remercie pour ton implication dans la vie du forum, c'est super serviable de ta part.
@Ollivier: J'ai cru à tes idées, mais ça n'a rien changé....snif
@falsam: Génial cette gestion de timer, je débute en SB et n'ayant pas thread je ne savais pas comment faire, et je n'avais pas eu l'idée de prendre un timer (que j'utilise pourtant régulièrement en PB)
Bon par contre il n'y a rien qui accélère....
Mais en bidouillant vos exemples, je suis tombé sur le code ci dessous.
C'est quasi instantané, par contre l'affichage clignote un peu lorsque l'on bouge la liste.
Surprenant non!!! ???
Code : Tout sélectionner
If OpenWindow(0, 100, 100, 600, 600, "ListIcon Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CloseDebugOutput()
ButtonGadget(2,5,2,100,20,"Go")
TextGadget(3, 110, 2, 100, 20, "")
ListIconGadget(1, 5, 25, 590, 565, "ID", 100, #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
AddGadgetColumn(1, 1, "NOM", 250)
For i=0 To 4000
AddGadgetItem(1, -1, "ID"+i+Chr(10)+"I like to do this faster!")
Next
EndIf
Re: Accélérer le remplissage d'une listicongadget
Publié : sam. 25/mai/2019 5:29
par Ollivier
Tu cherches la petite bête ! Mais c'est bon à savoir le jour où je serai motivé à m'offrir SB.
T'es en train de sous-entendre qu'il perd du temps à passer d'un gadget à l'autre ?
Re: Accélérer le remplissage d'une listicongadget
Publié : sam. 25/mai/2019 10:22
par Stefou
Je ne sous entends rien je constate , stupéfait, je ne comprends pas pourquoi...???
Mais ça peut servir
Re: Accélérer le remplissage d'une listicongadget
Publié : sam. 25/mai/2019 21:55
par Ollivier
Et c'est stupéfiant ! Ça (pas toi, le système dans son résultat sans savoir quelle couche logicielle est responsable de ça) sous-entend qu'il est recommandé de traiter certaines tâche, un gadget après l'autre.
Merci pour ce partage d'idée (même de simple constat !).
Re: Accélérer le remplissage d'une listicongadget
Publié : mar. 28/mai/2019 9:10
par Mesa
10 000 entrées en 0.1 s mais sous Windows seulement.
Code : Tout sélectionner
EnableExplicit
Define EventID
Define a
Define StartTime
Define ElapsedTime
If OpenWindow(0,0,0,500,400,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ListIconGadget(1,10,10,480,380,"",400,0)
SendMessage_(GadgetID(1),#WM_SETREDRAW,0,0) ; le gadget n'est pas redessiné après un changement
StartTime = ElapsedMilliseconds()
For a=1 To 10000
AddGadgetItem(1,-1,"Item "+Str(a),0,0)
Next
SendMessage_(GadgetID(1),#WM_SETREDRAW,1,0) ; on redessine
ElapsedTime = ElapsedMilliseconds()-StartTime
MessageRequester("",Str(ElapsedTime)+" ms. après 10.000 entrées.",0)
Repeat
EventID=WaitWindowEvent()
If EventID = #PB_Event_CloseWindow
End
EndIf
ForEver
EndIf
Mesa.
Re: Accélérer le remplissage d'une listicongadget
Publié : mar. 28/mai/2019 12:49
par Ar-S
Bien joué, j'avais tenté avec un disablegadget ce qui ne changeait rien
Re: Accélérer le remplissage d'une listicongadget
Publié : mar. 28/mai/2019 17:21
par falsam
@Mesa : La demande était pour SpiderBasic