Page 1 sur 1

Listicon rapide

Publié : sam. 15/juin/2013 8:47
par Mesa
Je me permets de faire remonter un post du forum allemeand qui provient de RSBasic et de son fameux site http://www.rsbasic.de/aktualisierung/wi ... 3%BCgen.pb

Cette astuce permet de prendre jusqu'à 3 x moins de temps pour remplir un listicongadget.

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
Pour voir la différence, commentez les 2 sendmessage.

En plus, je trouve que ça donne un effet plus "pro";

Mesa.

Re: Listicon rapide

Publié : sam. 15/juin/2013 9:46
par Ar-S
Je passe de 2562 à 188ms ! Bluffant ! 8O
Si j'ai bien pigé lors d'un AddGadgetItem, PB redessine à chaque fois, du coup l'API sert à bloquer le redraw jusqu'à que la boucle soit terminée puis redessine une fois pour tout à la fin.

Re: Listicon rapide

Publié : sam. 15/juin/2013 10:51
par Mesa
Oui, c'est ça.

Avec mon Xp 32b, cpu P4 mono core, je passe de 750ms à 265ms.

@ARS, t'es sur win8 64b ?

Ça serait bien de comparer les différents Windows, linux et macos, pour voir :wink:

Mesa.

Re: Listicon rapide

Publié : sam. 15/juin/2013 17:04
par venom
sympa en effet.

pour moi c'est : 2262ms contre 109 ms :)

config dans la signature.







@++

Re: Listicon rapide

Publié : sam. 15/juin/2013 20:22
par graph100
pour moi ça passe de 1391ms à 109ms.
Mesa a écrit :Ça serait bien de comparer les différents Windows, linux et macos, pour voir :wink:
Comme c'est une API windows, on ne peut pas comparer le même code sur les différents OS. Il faudrait trouver les commandes correspondantes sur chaque OS !!

Re: Listicon rapide

Publié : sam. 15/juin/2013 20:39
par Kwai chang caine
Top cool la combine 8O
Ca va m'etre super utile à partir de maintenant
Merci de l'info 8)

Re: Listicon rapide

Publié : dim. 16/juin/2013 12:36
par Ar-S
Mesa a écrit : @ARS, t'es sur win8 64b ?
Mesa.
Oui => signature

Re: Listicon rapide

Publié : dim. 16/juin/2013 16:50
par G-Rom
sur linux ( avec gtk donc ) , cette manip ne sert à rien , même en gelant l'update pendant l'ajout , le délais est le même.

Re: Listicon rapide

Publié : dim. 16/juin/2013 18:15
par graph100
et il est de combien ? de l'ordre du delay sans update de window ?

Re: Listicon rapide

Publié : dim. 16/juin/2013 19:31
par G-Rom
50ms ici.

Re: Listicon rapide

Publié : lun. 17/juin/2013 15:36
par Mesa
C'est fou.
Un Win8 64b qui est 2 à 3 fois plus lent qu'un Xp 32b pour l'affichage (sans accélération 3D), c'est bizarre.

Doit-on penser que l'affichage de Win8 a été complètement recodé, du coup l'api32 ne serait que "émulée" par exemple ?

Dans ce cas, PureBasic risque dans l'avenir d'être de plus en plus lent dans le cas d'une fenêtre contenant un grand nombre de gadget (sous Windows).
Un méga travail pour Fred en perspective ? :wink:

Mesa.

Re: Listicon rapide

Publié : lun. 17/juin/2013 16:47
par graph100
C'est vrai que même avec mon pc je vais plus lentement que toi ;)
En revanche avec l'affichage desactivé, ca va 2 fois plus vite.

Et avec mon win7 sur un i3 : 2044ms à 109ms.... C'est bien la même structure d'affichage xD

Re: Listicon rapide

Publié : lun. 01/juil./2013 19:44
par morosh
moi, j'ai passé de 2840ms à 295ms
impressionnant!!!!

Merci pour l'info et le partage