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.