Seite 1 von 1

Listicongadget sehr langsam bei der Darstellung

Verfasst: 10.02.2019 11:48
von kmais
Hallo,
Ich fülle ein Listicongadget mit 600 Spalten und etwa 400 Zeilen über den üblichen Weg mit addgadgetitem.
Das ganze braucht mit Linux fast 3 Minuten!
Führe ich den absolut gleichen Code mit Windows aus braucht das ganze noch nicht einmal 1 Sekunde.
Ich vermute, dass dieses sehr unterschiedliche Verhalten an der Nutzung von Qt bzw. GTK durch Pb in Linux liegt. Evtl. greift Pb in Windows nur auf dessen Api zu.
Am Code liegt es nicht. Der Flaschenhals ist definitiv das Gadget.
Wenn jemand mehr dazu weiß wäre das toll.
Mit Gambas über ein Grid habe ich die gleiche Performance wie Pb über Windows. Gambas nutzt GTK.
Das Verhalten in Linux ist unabhängig von der Ubuntu Distri. Ich habe es mit verschiedenen Lubuntu, Kubuntu und Mint Versionen getestet.

Re: Listicongadget sehr langsam bei der Darstellung

Verfasst: 10.02.2019 12:37
von Lord
Hallo!

Ich nutze kein Linux, aber hast Du einmal probiert, während des Befüllens
das Gadget mittels HideGadget() zu deaktivieren, damit nicht bei jedem
neuen Eintrag das Gadget aktualisiert wird?
Vielleicht gibt es bei Linux ein Gegenstück zu
SendMessage_(GadgetID(#List), #WM_SETREDRAW, #False, 0) bzw.
SendMessage_(GadgetID(#List), #WM_SETREDRAW, #True, 0)
um das aktualisieren aus-/einzuschalten.
Das benutze ich bei Windows in solchen Fällen.

Re: Listicongadget sehr langsam bei der Darstellung

Verfasst: 10.02.2019 14:32
von Sicro

Code: Alles auswählen

columsCount  = 600
itemsCount = 400

If OpenWindow(0, 100, 100, 1000, 500, "ListIcon Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ListIconGadget(0, 5, 5, 1000, 500, "1", 100, #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
 
  ; Spalten hinzufügen
  For i = 2 To columsCount ; Start bei "2", weil ja bereits eine Spalte existiert
    AddGadgetColumn(0, i, Str(i), 100)
  Next
 
  ; Liste füllen
  HideGadget(0, #True)
  DisableGadget(0, #True)
  For i = 1 To itemsCount
    item$ = ""
    For x = 1 To columsCount
      If item$ <> ""
        item$ + Chr(10)
      EndIf
      item$ + "Entry_" + Str(i) + "/" + Str(x)
    Next
    AddGadgetItem(0, -1, item$)
  Next
  DisableGadget(0, #False)
  HideGadget(0, #False)
 
  Repeat
    Event = WaitWindowEvent()
  Until Event = #PB_Event_CloseWindow
 
EndIf
@kmais: Es wäre schön gewesen, wenn du so ein Code zum Testen bereitgestellt hättest.

GTK-3: 2 Minuten (durch HideGadget() oder DisableGadget() wird es nicht besser)
GTK-2: 6 Sekunden
QT: 2 Sekunden

Eine Lösung für das langsame Befüllen unter GTK-3 habe ich leider nicht.

Re: Listicongadget sehr langsam bei der Darstellung

Verfasst: 10.02.2019 21:29
von kmais
He, danke schön.
Ich wusste es !!!!
Ich habs jetzt mit GTK2 als Subsystem getestet - 3,2 sek. Super!!! Das ist doch schon etwas ganz anderes.

Meinen Code habe ich nicht gepostet, weil die Daten aus einer Datenbank stammen. Das Füllen geschieht über addgadgetitem ohne irgendetwas besonderem vorher oder nachher :-). Da ist einfach nichts. Und Windows bekommt exakt den gleichen Code.
Es liegt definitiv an den verwendeten Libraries.

Jetzt habe ich doch noch eine Frage.
GTK2 ist bei mir schon im Subsystem drinnen, PB 5.7.
Wie bekomme ich jetzt Qt rein? Also, welche Libraries und woher? Qt ist installiert.
Da brauche ich wirklich Unterstützung.

Aber vieeeeelen Dank für deinen Test.

Klaus-Peter

Re: Listicongadget sehr langsam bei der Darstellung

Verfasst: 11.02.2019 00:42
von mk-soft
Habe ich bestimmt schon 100 mal irgendwo rein kopiert.

Mein Installations-Guide für Linux
Purebasic
---------
sudo apt-get install build-essential gcc g++

sudo apt-get install libxxf86vm-dev libxine2-dev unixodbc-dev libsdl1.2-dev libsdl2-dev

sudo apt-get install libgtk2.0-dev libgtk-3-dev libwebkitgtk-dev libwebkitgtk-3.0-dev libwebkit2gtk-4.0-dev


Subsystem qt
------------
sudo apt-get install qtbase5-dev qttools5-dev qtmultimedia5-dev qtdeclarative5-dev libqt5svg5-dev libqt5webkit5-dev libqt5multimedia5-plugins


Ubuntu Gnome 18.xx (For PB-IDE)
-------------------------------
sudo apt install libcanberra-gtk-module

Obsoleted
---------
;sudo apt-get install libgnome2-dev
;sudo apt-get install libgnomeprintui2.2-dev libxine-dev


Ubuntu missing default libs (Without developer packets)
-------------------------------------------------------
gtk2
- sudo apt-get install libgtk2.0
gtk3
- sudo apt-get install libwebkitgtk-3.0
qt
- sudo apt install qt5-default

Re: Listicongadget sehr langsam bei der Darstellung

Verfasst: 11.02.2019 09:35
von kmais
... und dennoch immer wieder schön ... :mrgreen:

Danke ... :allright: