![]() |
AW: Kann ich meine ListView beschleunigen (Icon laden dauert ewig)
Hm...würde mir einer mal erklären, warum BeginUpdate und EndUpdate einer ListView nicht ausreichen, und zusätzlich noch das Minimize btw. Restore mehr Geschwindigkeit bringen soll?
|
AW: Kann ich meine ListView beschleunigen (Icon laden dauert ewig)
Zitat:
Zitat:
|
AW: Kann ich meine ListView beschleunigen (Icon laden dauert ewig)
Zitat:
Ist 'ne langjährige praktische Erfahrung / Beobachtung, die man halt ausnützen kann, wenn was schneller gehen soll. Und ja @DieDolly, anwenderfreundlich ist was anderes ;-) |
AW: Kann ich meine ListView beschleunigen (Icon laden dauert ewig)
Delphi-Quellcode:
Ich habe die Idee mit Thread mal auf diese Weise ausprobiert, also Geschwindigkeit boost ohne ende, aber irgendwas mach ich da noch falsch, jetzt werden viele Icons nicht korrekt geladen.
procedure TfrmMain.StartIcons();
begin TThread.CreateAnonymousThread(procedure () var LIcon: TIcon; I: Integer; dummy: Word; begin dummy := 0; LIcon := TIcon.Create; LIcon.Transparent := True; try lvFiles.Update; FileIcons.BeginUpdate; for i := 0 to lvFiles.Items.Count -1 do begin LIcon.Handle := ExtractAssociatedIcon( hInstance, PWideChar( lvFiles.Items.Item[ i ].Caption ), dummy ); LIcon.Transparent := True; lvFiles.Items.Item[ i ].ImageIndex := FileIcons.AddIcon( LIcon ); DestroyIcon( LIcon.Handle ); end; TThread.Synchronize (TThread.CurrentThread, procedure () begin end); finally FileIcons.EndUpdate; LIcon.Free; end; end).Start; end; |
AW: Kann ich meine ListView beschleunigen (Icon laden dauert ewig)
Niemals unsynchronisiert aus einem Thread heraus auf VCL-Controls zugreifen, das ist eine uralte Weisheit.
|
AW: Kann ich meine ListView beschleunigen (Icon laden dauert ewig)
Zitat:
Im Moment macht Synchronize gar nichts. Und dann kannst du auch nicht sicher sein ob Synchronize das richtige ist denke mal nicht denn du möchtest ja nicht warten oder? Denn dann dauert es wieder genauso lang. Spiele mal mit Queue und Synchronize rum dann nimm das was am besten für dich ist. gruss |
AW: Kann ich meine ListView beschleunigen (Icon laden dauert ewig)
Wo kommt denn der Geschwindigkeitsvorteil her?
Vorher wurde alles im Mainthread gemacht, jetzt alles in einem einzigen Thread. Die Arbeit wurde 1:1 verlagert. Einen Vorteil hast Du doch erst, wenn Du mehrere Threads auf das Problem loslässt und somit mehrere Kerne nutzt. :gruebel: |
AW: Kann ich meine ListView beschleunigen (Icon laden dauert ewig)
Zitat:
Delphi-Quellcode:
Danke, ich habe es auf diese Weise korrigiert aber das Problem besteht immer noch, ich finde meinen Fehler nicht.
procedure TfrmMain.StartIcons();
begin TThread.CreateAnonymousThread(procedure () var LIcon: TIcon; I: Integer; dummy: Word; begin dummy := 0; LIcon := TIcon.Create; LIcon.Transparent := True; try lvFiles.Update; FileIcons.BeginUpdate; for i := 0 to lvFiles.Items.Count -1 do begin begin LIcon.Handle := ExtractAssociatedIcon( hInstance, PWideChar( lvFiles.Items.Item[ i ].Caption ), dummy ); LIcon.Transparent := True; end; TThread.Synchronize (TThread.CurrentThread, procedure () begin lvFiles.Items.Item[ i ].ImageIndex := FileIcons.AddIcon( LIcon ); end); DestroyIcon( LIcon.Handle ); end; finally FileIcons.EndUpdate; LIcon.Free; end; end).Start; end; |
AW: Kann ich meine ListView beschleunigen (Icon laden dauert ewig)
DeddyHs Hinweis auf alle VCL-Controls anwenden und nicht nur auf eine Zeile? ;-)
|
AW: Kann ich meine ListView beschleunigen (Icon laden dauert ewig)
Zitat:
Du verwendest SendMessage besser wäre PostMessage wenn du nicht warten willst. Zitat:
Du kannst TThread wie eine normale procedure behandeln falls du das nicht weist.
Delphi-Quellcode:
gruss
TThread.Synchronize (TThread.CurrentThread,
procedure () var // Meine Variablen begin // Meine Funktion end); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz