Listview befüllen

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Vbxler
Beiträge: 129
Registriert: Sa 25. Mai 2013, 07:43
OS, Lazarus, FPC: Win7_x64 (FPC:4.7.1)
CPU-Target: 32Bit

Listview befüllen

Beitrag von Vbxler »

Ist die Vorgangsweise wie ich das Listview befülle richtig,
oder gibt es eine schnellere Lösung?

Code: Alles auswählen

procedure TForm1.cmdEinfuegenClick(Sender: TObject);
var
    ListItem: TListItem;
    iZeiger: integer;
    startZeit : dword;
begin
    startZeit := GetTickCount;
    //Daten eintragen
    for iZeiger := 0 to 1000 do
      begin
        ListItem := ListView1.Items.Add;
        ListItem.Caption := 'Item';
        ListItem.SubItems.Add('SubItem_' + IntToStr(iZeiger));
        ListItem.SubItems.Add('SubItem_' + IntToStr(iZeiger));
        ListItem.SubItems.Add('SubItem_' + IntToStr(iZeiger));
        ListItem.SubItems.Add('SubItem_' + IntToStr(iZeiger));
        ListItem.SubItems.Add('SubItem_' + IntToStr(iZeiger));
      end;
 
    ShowMessage(IntToStr(GetTickCount- startZeit));
end;   
Ich frage deshalb, weil dieser Code in Pascal ca. 15-17 Sek. für das eintragen der Daten benötigt,
der Vorgang muesste aber unter 100ms abgeschlossen sein.

Danke für eure Hilfe.
Vbxler
-------------------------

Benutzeravatar
h-elsner
Lazarusforum e. V.
Beiträge: 282
Registriert: Di 24. Jul 2012, 15:42
OS, Lazarus, FPC: LINUX Mint21.1, Win10, Lazarus 2.2.4, FPC3.2.2
CPU-Target: X86-64; arm 32bit
Wohnort: Illertissen
Kontaktdaten:

Re: Listview befüllen

Beitrag von h-elsner »

Also bei mir dauert das 190ms. Was für einen Rechner hast du denn???
Mit ListView1.BeginnUpdate und ListView1.EndUpdate gekapselt dauert es 120 ms.

Gruß He

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Listview befüllen

Beitrag von Michl »

Normal dauerts bei mir 125ms. Wenn ich zuvor Listview1.visible auf false setze, nach dem Füllen auf true, sinds nur 63ms!

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Eb
Lazarusforum e. V.
Beiträge: 240
Registriert: Di 5. Feb 2008, 15:32
OS, Lazarus, FPC: Linux Mint - Laz 2.2.0
CPU-Target: 64Bit
Wohnort: Stuttgart

Re: Listview befüllen

Beitrag von Eb »

Dein Code dauert bei mir ohne Veränderungen 55 - 58 ms.
mit vorher unsichtbar machen 38 - 42 ms

Mein PC ist 2 bis 3 Jahre alt und keine Höllenmaschine.
OS: OpenSuse 11.3

Eb

Vbxler
Beiträge: 129
Registriert: Sa 25. Mai 2013, 07:43
OS, Lazarus, FPC: Win7_x64 (FPC:4.7.1)
CPU-Target: 32Bit

Re: Listview befüllen

Beitrag von Vbxler »

Danke für eure Antworten und Hilfstellungen,

mit BeginnUpdate und EndUpdate komme ich auf ein erträglichen Zeitwert
von ca. 125ms und Listview1.visible bringt auch noch einige ms.
Vbxler
-------------------------

mischi
Beiträge: 206
Registriert: Di 10. Nov 2009, 18:49
OS, Lazarus, FPC: macOS, 10.13, lazarus 1.8.x, fpc 3.0.x
CPU-Target: 32Bit/64bit

Re: Listview befüllen

Beitrag von mischi »

Vielleicht übersehe ich ja was, aber wenn der String tatsächlich immer der selbe ist, kann man die mehrfache Erzeugung des String vorziehen:

Code: Alles auswählen

procedure TForm1.cmdEinfuegenClick(Sender: TObject);
var
    ListItem: TListItem;
    iZeiger: integer;
    startZeit: dword;
    subItemText: string;
begin
    startZeit := GetTickCount;
    //Daten eintragen
    for iZeiger := 0 to 1000 do
      begin
        subItemText := 'SubItem_' + IntToStr(iZeiger);
        ListItem := ListView1.Items.Add;
        ListItem.Caption := 'Item';
        ListItem.SubItems.Add(subItemText);
        ListItem.SubItems.Add(subItemText);
        ListItem.SubItems.Add(subItemText);
        ListItem.SubItems.Add(subItemText);
        ListItem.SubItems.Add(subItemText);
      end;
 
    ShowMessage(IntToStr(GetTickCount- startZeit));
end;
MiSchi macht die fink-Pakete

Antworten