![]() |
AW: Kann ich meine ListView beschleunigen (Icon laden dauert ewig)
Ich hoffe *bet* das ichs jetzt gerafft habe:
Delphi-Quellcode:
procedure TfrmMain.StartIcons();
begin TThread.CreateAnonymousThread(procedure () var LIcon: TIcon; dummy: Word; begin dummy := 0; LIcon := TIcon.Create; LIcon.Transparent := True; try TThread.Synchronize (TThread.CurrentThread, procedure () var I: Integer; begin 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; end); finally FileIcons.EndUpdate; LIcon.Free; end; end).Start; end; |
AW: Kann ich meine ListView beschleunigen (Icon laden dauert ewig)
Delphi-Quellcode:
TThread.Synchronize (TThread.CurrentThread,
Bist sicher? Nicht Nil! Nur mal als sample
Delphi-Quellcode:
function TSessionThread.OnSessionCreated(NewSession: IAudioSessionControl): HResult;
begin Result := S_FALSE; if (MainThreadID <> GetCurrentThreadId) then begin TThread.Queue(nil, procedure var bDuplicate: BOOL; i: Integer; begin if Assigned(FOnAudioSessionCreate) then begin ASessionInfo := GetSessionInfo(NewSession); if ASessionInfo.FileName <> '' then begin // Check to prevent duplicate registeration of audio session bDuplicate := false; for i := 0 to (FSessionCount - 1) do if SessionInfo[i].PID = ASessionInfo.PID then begin // for the case of reuse of same PID (but different programs) if SessionInfo[i].State <> AudioSessionStateExpired then begin bDuplicate := true; Break; end; end; if not bDuplicate then begin inc(FSessionCount); SetLength(SessionInfo, FSessionCount); SessionInfo[FSessionCount - 1] := ASessionInfo; FOnAudioSessionCreate(NewSession, ASessionInfo, FSessionCount); end; end; end; end); Result := S_OK; end; end; Zitat:
Super na ja dann addiere die unbekannten mal zur Imagelist. ;) Ist doch einfach oder? :) gruss |
AW: Kann ich meine ListView beschleunigen (Icon laden dauert ewig)
Mein nächster Versuch, bis jetzt mehr als gescheitert, bin noch auf Fehlersuche.
Hab mal im Soure kommentiert so wie ich es dachte das es funktioniert:
Delphi-Quellcode:
das ist momentan die schnellste variante, da sie nicht funktioniert :-]
//dieses mal mit eingabe
procedure TfrmMain.StartIcons( ListView: TListView; ImageList: TImageList ); begin // hier soll ein Thread abseits des Mainthreads starten um diesen zu entlasten TThread.CreateAnonymousThread(procedure () var // <- locale variablen für den Thread LIcon: TIcon; dummy: Word; I: Integer; LImageList: TImageList; LListView: TListView; begin dummy := 0; LListView := TListView.Create( nil ); LImageList := TImageList.Create( nil ); LIcon := TIcon.Create(); LIcon.Transparent := True; LImageList.BeginUpdate; LImageList.Assign( ImageList ); // <-- lokale kopie der aktuellen liste LListView.Items.BeginUpdate; LListView.Assign( ListView ); // <-- lokale kopie der aktuellen liste try // <-- beginne mit der arbeit an den lokalen kopien for i := 0 to LListView.Items.Count -1 do begin LIcon.Handle := ExtractAssociatedIcon( hInstance, PWideChar( LListView.Items.Item[ i ].Caption ), dummy ); LIcon.Transparent := True; LListView.Items.Item[ i ].ImageIndex := LImageList.AddIcon( LIcon ); DestroyIcon( LIcon.Handle ); end; LImageList.EndUpdate; LListView.Items.EndUpdate; TThread.Synchronize (nil, procedure () // übergebe lokale kopien zurück an vcl begin FileIcons.BeginUpdate; FileIcons.Assign( LImageList ); FileIcons.EndUpdate; lvFiles.Items.BeginUpdate; lvFiles.Assign( LListView ); lvFiles.Items.EndUpdate; end); finally LIcon.Free; LImageList.Free; LListView.Free; end; end).Start; end; |
AW: Kann ich meine ListView beschleunigen (Icon laden dauert ewig)
Zitat:
![]() |
AW: Kann ich meine ListView beschleunigen (Icon laden dauert ewig)
OK letzter Tip.. Doublebuffer true?
gruss |
AW: Kann ich meine ListView beschleunigen (Icon laden dauert ewig)
Eigentlich bietet sich TParallel.For hierfür an.
Sherlock |
AW: Kann ich meine ListView beschleunigen (Icon laden dauert ewig)
Zitat:
Zitat:
Zitat:
|
AW: Kann ich meine ListView beschleunigen (Icon laden dauert ewig)
Zitat:
Delphi-Quellcode:
geht. Das Code-Beispiel, auf das ich mich bezog, enthält das jedoch genau nicht - wurde aber mit "Geschwindigkeit boost ohne ende" klassifiziert.
TParallel.For
|
AW: Kann ich meine ListView beschleunigen (Icon laden dauert ewig)
Zitat:
Wenn man im TParallel.For noch auf die Festplatte zugreifen muss, dann braucht man auch keine TParallel mehr nutzen denn dann schadet das eher. |
AW: Kann ich meine ListView beschleunigen (Icon laden dauert ewig)
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:13 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