Einzelnen Beitrag anzeigen

fisipjm

Registriert seit: 28. Okt 2013
299 Beiträge
 
#11

AW: ListView Performance bei vielen Datensätzen (FMX)

  Alt 16. Jul 2024, 13:27
Ja, das wäre eine Untersuchung wert: wo ist das Bottleneck?
Laden aus der DB oder Einfügen in das Listview?
Ich gehe auch davon aus, dass die where Begingung des Selects
einen passenden Index in der DB nutzen kann?
Das "Bottleneck" ist 2 geteilt. Wie gesagt, das öffnen der Query ist nicht das Problem. Die Ist zu diesem Zeitpunkt schon lange offen. Das einzige was ich noch mache ist ein Query.first das geht unter 1ms.
Was "lange" braucht ist
Delphi-Quellcode:
while not Query.Eof do
        begin
          lListViewItem := ListView.Items.Add;
          lListViewItem.Objects.FindObjectT<TListItemText>('Field1').Text := lField1.AsString;
          lListViewItem.Objects.FindObjectT<TListItemText>('Field2').Text := lField2.AsString;
          lListViewItem.Objects.FindObjectT<TListItemText>('Field3').Text := lField3.AsString;
          lListViewItem.Objects.FindObjectT<TListItemText>('Field4').Text := lField4.AsString;
          lListViewItem.Tag := Query.RecNo;
          Query.Next;
        end;
Diese Funktion braucht für 138902 Datensätze 2309 ms zum einfügen in die Listview. Das sind 60 Einträge pro ms. Deshalb "langsam" in Anführungszeichen.

Der 2. Aufruf der "Lange" dauert ist das Anzeigen der Listview, also das setzen von Listview.Visible = true. Das dauert 907 ms. Auch hier ist deshalb langsam in Anführungszeichen geschrieben.

Nochmal zum Thema SQL. Die Query ist bereits geöffnet (Filter werden direkt nach der Anmeldung gesetzt und öffnen wird im Hintergrund durchgeführt) , also keine Möglichkeit hier sehr sicher keine Optimierung zu erreichen.
  Mit Zitat antworten Zitat