Performance bei der Funktion _GUICtrlListView_AddArray

  • N´abend allerseits,

    ich habe eine Frage zur

    AutoIt
    _GUICtrlListView_AddArray


    Wie kann ich diese Funktion beschleunigen?

    In meinem Script wird die Liste geleert, die Daten aus einer SQLite DB gelesen, die erste Zeile gelöscht und dann in die Liste wieder eingefügt.

    Das ganze dauert bei 335 Einträgen und 20 Reihen ca. 2,3 Sekunden.
    Die meiste Zeit braucht dabei _GUICtrlListView_AddArray

    Liste leeren : 0.224454070137658

    SQL Query: 588.150877758208
    Array clearing: 39.1772754310254
    Liste befüllen: 1702.26591515458


    Kennt das jemand?


    VG

    horphi

  • @Kanashius,
    _guictrllistview_beginupdate und _guictrllistviewendupdate sind in der Funktion _GUICtrlListView_AddArray enthalten!

    @horphi, Cursor auf den Funktionsnamen, ctrl+j springt in die UDF, untersuche die Funktion(en) und vor allem die drei Schleifen mit den Timerbefehlen und finde den "Übeltäter". Ich vermute die DllStructSetData als Zeitfresser, am SendMessage() wird man nicht viel machen können...

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (29. März 2016 um 00:00)

  • Hallo noch mal,

    nach einer Zeitmessung ist der größte Teil wie schon von @Andy vermutet in der DLLStructSetData .

    Gibt es noch eine andere Listenfunktion, um aus SQLite GUI Listen zubefüllen?

    Danke und Gruß,

    horphi

  • Hiermit:


    komm ich auf ~2100 Einträge die Sekunde... schneller wüsst ichs nicht.
    Ist noch nen bisschen was drumrum mit Progressbar,... deshalb auch die _deleteitem und _sortsimple selber (bearbeitet)

  • Hallo @Kanashius,

    was ist das für eine Funktion? Ist die in einer UDF verankert, oder von dir?

    VG

    horphi

    sind mehrere selbstgestrickte. Wobei diese imho mininmal langsamer sein müßten als _GUICtrlListView_AddArray, da noch andere Aufgaben erledigt werden. Ich wundere mich gerade deshalb über seine Zeiten und würde mich freuen wenn @Kanashius ein kleines Demoskript einstellt, ich habe eine LV mit über 30.000 Items und wäre froh wenn ich die LV < 1 Min (30.000 / 2.000/sec = 15 sec) anzeigenkönnte.

    2 Mal editiert, zuletzt von autoBert (30. März 2016 um 22:19)

  • So, jetzt hatte ich etwas Zeit.
    Die Funktion(-en) stammen aus meinem Projekt Buchsammlung, dass ich mal geschrieben hab. Hab mal nen Beispielscript daraus gebastelt.
    Nicht wundern: Man übergibt ein 1D-Array und die Spaltenzahl (hab bei _Sqlite keine Table, sondern ein 1D Array bekommen). Die ersten Einträge sind die Listview Spalten.
    Sortiert wird nach der 1. Spalte, wenn man es nutzt. Löschen dauert länger als einfügen ;)

    Script:


    Messungsergebnisse:

    Ich weiß nur nicht, warum der beim löschen maximal bis 65540 geht...


    MfG Kanashius