Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   ListView füllen dauert lange (https://www.delphipraxis.net/179651-listview-fuellen-dauert-lange.html)

d7user1 22. Mär 2014 11:22

ListView füllen dauert lange
 
hallo. ich befülle eine listview momentan mit 13000 items zum testen. das dauert momentan mit ein paar extras wie Icon hinzufügen, DateTimeToStr, Copy und MeinItem.Checked := True
runde 27 sekunden.

nehme ich das hinzufügen des icons heraus dauert es noch 9 sekunden. mit icon in der liste (dateityp z.b.) ist es natürlich schöner. aber wie löse ich das problem mit den 17 sekunden die zuviel sind? ich füge das icon so hinzu:

Delphi-Quellcode:
var
Icon: TIcon;
 FileInfo: SHFILEINFO;
begin
Icon := TIcon.Create;
// ...
SHGetFileInfo(PChar(sSourceDir + sCurrItem), 0, FileInfo, SizeOf(FileInfo), SHGFI_ICON or SHGFI_SMALLICON);
Icon.Handle := FileInfo.hIcon;
MeinItem.ImageIndex := ImageList1.AddIcon(Icon);
// ...
end;
gibt es eine schnellere methode als die ImageList? denn wenn 13.000 mal dasselbe icon per SHGetFileInfo() geholt wird, wird es auch 13.000 in die ImagList hinzugefügt.

DeddyH 22. Mär 2014 11:26

AW: ListView füllen dauert lange
 
Schau mal etwas weiter unten: http://www.delphipraxis.net/179644-listview-mit-ownerdata-schneller-machen.html

cookie22 22. Mär 2014 14:26

AW: ListView füllen dauert lange
 
Wie fügst du denn die Items zu?

Mit Items.Add ist das grotten langsam weil alle Items in dem Listview gespiechert werden. Das solltest du virtuell machen. Dazu gibt es soagr ein Beispiel bei den Beispielprojekten glaub ich.

Du solltest dem Listview eine SystemImageliste zuweisen und den Iconindex abfragen, das dürfte auch wesentlich schneller sein.

d7user1 22. Mär 2014 15:19

AW: ListView füllen dauert lange
 
mit MeinItem := ListView1.Items.Add; momentan. virtuell? da kenne ich mich leider nicht aus.

die icons lade ich wie im beispiel von popov nun in eine liste und lade die liste wenn sie gebraucht wird und nicht vorher (unterschied: vorher etwas über 25 sekunden, nun 4 bei 13.000 items).

http://www.delphipraxis.net/179644-l...ml#post1253010

cookie22 22. Mär 2014 16:17

AW: ListView füllen dauert lange
 
Dann ist das auch schon die Antwort. Mit Items.Add dauert das halt ewig.

Wie schon gesagt sollte bei den Demos ein Beispiel dabei sein, welches Virtual Listview heißt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz