Entwickler-Ecke

Sonstiges (Delphi) - HandleStream (Record) in ListView lesen sehr langsam


Chatfix - Di 18.10.05 10:44
Titel: HandleStream (Record) in ListView lesen sehr langsam
Hallo,

ich habe zwar gesucht weis aber nciht so recht nach wasu nd hab auch nix passendes gefunden, deshalb meine Frage.

Ich habe 9999 einträge in einem array dessen Typ ein Record ist und speichere diese per HandleStream.

Will ich diese einträge nun auslesen funktioniert das superschnell, ich will aber alle einträge in einem ListView und das hinzufügen per schleife (for to do) aus dem array dauert ewig.

Die ersten einträge gehen sper schnell und es wird immer langsamer...

hat einer eine idee an was das leigen könnte?


Martin1966 - Di 18.10.05 11:02

Hallo :wink2:

Die Listview hat den Ruf das sie sehr langsam ist. Rufst du ganz am Anfang bevor du die Items hinzufügst auch BeginUpdate auf und am Ende EndUpdate?

Lg Martin


Chatfix - Di 18.10.05 11:29

Also ich habe das ListView extra auf Visible := False gesetzt.
BeginUpdate und EndUpdate gibts bei mir nicht :?:


Martin1966 - Di 18.10.05 11:46

user profile iconChatfix hat folgendes geschrieben:
BeginUpdate und EndUpdate gibts bei mir nicht :?:

Das sind Methoden der Eigenschaft Items.


alzaimar - Di 18.10.05 12:11

Ich würde den Virtualmode der TListView nehmen.
Im Inspector

Delphi-Quelltext
1:
ListView.OwnerData := True; -- Delphi OH verwenden!!!                    

Zur Laufzeit (nach dem LAden des Arrays)

Delphi-Quelltext
1:
ListView.Items.Count := Length (MyArray);                    

und den Event ListView.OnData setzen, z.B. so:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm2.ListViewData(Sender: TObject; Item: TListItem);
begin
  Item.Caption := MyRecord [Item.Index].Title;
  Item.SubItems.add (MyRecord [Item.Index].MoreText);
  Item.SubItems.add (MyRecord [Item.Index].AndMoreText);
end;


Damit kannst Du dann auch 100.000.000 Items in 1ms darstellen.

Bei 10000 Items könnte BeginUpdate/EndUpdate auch reichen. Aber der VirtualMode ist so elegant, weil z.B. die Darstellung sofort mit Änderungen in deinen Daten synchronisiert ist.


Martin1966 - Di 18.10.05 12:15

Wow... danke für den Hinweis. Ich wusste gar nicht das es diese Eigenschaft gibt. ;-)


Chatfix - Di 18.10.05 12:39

OK Vielen Dank, ich werde es mal ausprobieren!