[gelöst] ListIconGadget schneller füllen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

scholly hat geschrieben:mit AddGadgetItem(#main_list,-1,eintrag): 21125/22594/22578
ohne AddGadgetItem(#main_list,-1,eintrag): 1422/1422/1422
gut, dann können wir davon ausgehen, dass SQLite nicht der Performance-
Killer ist. Nun solltest Du Deine Zeitmessung (wie bereits von Fluid Byte
empfohlen) mit AddGadgetItem() wiederholen und dabei das Redraw des
ListIconGadgets vorher ab- und nachher anschalten.

Das bringt 100%ig einen Performance-Schub. Wenn nicht, dann
implementierst Du das falsch ;-)

Code: Alles auswählen

[...]
If maintable

  SendMessage_(GadgetID(#main_list),#WM_SETREDRAW,0,0) ; !!!
  
  While SQLiteNextRow(maintable)
    
    eintrag = ""
    While SQLiteNextCol(maintable)
      eintrag = eintrag + SQLiteValue(maintable) + Chr(10)
      spaltencounter + 1
    Wend
    
    AddGadgetItem(#main_list,-1,eintrag)
    sbarfeld2 = "geladene Filme: " + Str(Zeilencounter + 1)
    StatusBarText(#main_stbar, 2, sbarfeld2)
    SetGadgetState(#main_prbar,Zeilencounter)
    ; ohne die Schleife refresht das Window nicht korrekt, siehe meinen Thread im PB-Forum
    While WindowEvent(): Wend
    Zeilencounter + 1
    ;Debug Zeilencounter
  Wend
  
  SendMessage_(GadgetID(#main_list),#WM_SETREDRAW,1,0)  ; !!!
  
EndIf
[...]
Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

Ich habs so geändert, wie empfohlen und folgende Testergebnisse:
21437,21406, 20062,20000,20000,19984,21422,20046,21516,21531

Wenn ich AddGadgetItem(#main_list,-1,eintrag) auskommentiere, erhalte ich 10x hintereinander 203.

[edit 15:30]
Wenn ich die Zeile durch AddGadgetItem(#main_list,-1,"egal") ersetze, bin ich wieder in der 21000er Gegend.

Ebenso, wenn ich #main_list durch den Wert ersetzte oder "-1" durch "0".

Das Auskommentieren der Zeilen zum Füllen der Status- und Progressbar bewirkt auch nix.

völlig :freak: ... scholly
Zuletzt geändert von scholly am 20.01.2008 00:16, insgesamt 1-mal geändert.
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

scholly hat geschrieben:völlig :freak: ... scholly
bevor Du völlig :freak: bist: Du kannst mir ja mal den Code via EMail
schicken. Vielleicht finde ich da was.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

Kiffi hat geschrieben:Du kannst mir ja mal den Code via EMail
schicken.
Sollte gleich ankommen - ich lehn mich dann mal zurück, guck Snooker und les die neue c't :lol:

auf seinen täglichen Anschiß wartend... scholly
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

Vielleicht hat er es geahnt, denn aus meinem Code-Schnipsel war's kaum ableitbar:
External Human Debugger Kiffi hat geschrieben: die Ursache liegt darin, dass Du *vor* Befüllen des ListIconGadgets
PureLVSORT einschaltest (das ist bei dem Label createmainLIG). Somit
wird die Liste bei jedem neu hinzugefügten Eintrag komplett sortiert.
Dass das ziemlich lange dauert, sollte klar sein.

Mein Vorschlag: PureLVSORT *nach* befüllen des ListIconGadgets
einschalten. Dann klappt's auch mit der Geschwindigkeit ;-)
Nö. Abgelehnt. :twisted:

Zum Einen checke gern so früh möglich, ob alle .lib, .pbi, .dll oder Ähnliches auch da sind, damit nicht später mittendrin irgendein Problem auftaucht.
Zum Anderen bietet das Proggi ja ettliche Möglichkeiten (und somit Subroutinen/Prozeduren), das LIG mit gefilterten Daten (einzelne Genres, Disks, Artists, Owner, o.Ä.) zu füllen.
Und dort überall den ganzen PureLVSORT-Kram, den ich verwende, zu wiederholen gefällt mir (zugegeben, "aus dem Bauch heraus") garnicht.

Letztendlich bietet aber PureLVSORT selber eine simple Möglichkeit, den gewünschten Effekt zu erreichen (bzw den unerwünschten zu unterbinden) :
PureLVSORT-Doku hat geschrieben:Syntax
PureLVSORT_Disabled(Disabled.l)
Description
Disable or enable PureLVSORT functions.
This may be handy when you have to add / remove a lot of data to / from a listicongadget : it's faster if PureLVSORT is disabled.
Die Füll-Schleifen sehen jetzt alle so aus:

Code: Alles auswählen

            PureLVSORT_Disabled(#True)
            While SQLiteNextRow(thisTable)
              eintrag = ""
              While SQLiteNextCol(thisTable)
                eintrag = eintrag + SQLiteValue(thisTable) + Chr(10)
              Wend
              AddGadgetItem(#main_list,-1,eintrag)
              sbarfeld2 = "geladene Filme: " + Str(Zeilencounter + 1)
              StatusBarText(99, 2, sbarfeld2)
              SetGadgetState(#main_prbar,Zeilencounter)
              Zeilencounter + 1
              ;Debug Zeilencounter
            Wend
            PureLVSORT_Disabled(#False)
Und so klappts wirklich mit der Geschwindigkeit: ~1700 statt ~22000 ms :bounce:

:allright: :allright: Danke, Kiffi... Guck mal ins "About" /:->
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

scholly hat geschrieben:Abgelehnt. :twisted:
Aufgabenstellung war es, herauszufinden, warum das Befüllen des
ListIconGadget bei Dir so extrem lange dauert. Aufgabe erfüllt.

Welche Konsequenzen Du daraus ziehst, bleibt selbstredend Dir überlassen.
Ich wollte lediglich eine Lösungsmöglichkeit zeigen.
scholly hat geschrieben:Guck mal ins "About" /:->
Danke für die Credits. Allerdings weiß ich jetzt nicht, wie ich Dein Smiley zu
bewerten habe.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

Kiffi hat geschrieben: Allerdings weiß ich jetzt nicht, wie ich Dein Smiley zu
bewerten habe.
Guckt der nicht übertrieben desinteressiert unschuldig vor sich hinpfeifend verlegen in die Gegend ?
Daß er die Arme hinterm Rücken verschränkt hat, kann man leider nicht sehen und da es nur eine Momentaufnahme ist, auch nicht, wie er verlegen hin- und herschlenkert.

Mahhhlzeit... scholly
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Antworten