AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Kann ich meine ListView beschleunigen (Icon laden dauert ewig)
Thema durchsuchen
Ansicht
Themen-Optionen

Kann ich meine ListView beschleunigen (Icon laden dauert ewig)

Ein Thema von KodeZwerg · begonnen am 13. Nov 2018 · letzter Beitrag vom 14. Nov 2018
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Kann ich meine ListView beschleunigen (Icon laden dauert ewig)

  Alt 13. Nov 2018, 11:59
Bin mit guten Nachrichten zurück, also das FileIcons.Begin/EndUpdate brachte schonmal etwas boost, rein objektiv Betrachtet.
Delphi-Quellcode:
  Application.Minimize;
  lvFiles.Items.EndUpdate;
  FileIcons.EndUpdate;
  Application.Restore;
  Application.BringToFront;
aber das wirkt tatsächlich Wunder, kann ich nur Weiterempfehlen! Besten Dank für Tipps, hab ich aufgesaugt und werde es mir merken!

Ich teste jetzt noch ob das füllen der Icons seperat vom ListView.Add() was bringt.


Beste Grüße!
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Kann ich meine ListView beschleunigen (Icon laden dauert ewig)

  Alt 13. Nov 2018, 12:12
Spontan und komplex:

Ob ein Thread hier hilft, bin ich mir nicht sicher, da es ja um Icon-Handles geht, die im Haupthread stehen müssen.
Aber mindestens die Liste laden und erst danach im OnIdle die Icons stückweise nachladen könnte eine Option sein?

Oder nur die Icons der in der Liste aktuell sichtbaren Einträge laden und die anderen beim Scrollen nachladen?

Ggfls auch Icons cachen, macht die Shell ja auch.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Kann ich meine ListView beschleunigen (Icon laden dauert ewig)

  Alt 13. Nov 2018, 12:23
@CCRDude, die Idee gefällt mir, sehr sogar!
Also Icon routine komplett aus meiner Füll methode raus, wenn die fertig ist einen Thread starten der dann poe á poe Icons cached und in ListView das Index dafür setzt.
Hab ich ehrlich gesagt noch nie probiert, cooler Gedanke, das werde ich mal separat testen.

Ob mein MainThread momentan hängt kann mir ziemlich egal sein denn ohne ListView kann das Teil nichts :-]
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
1.001 Beiträge
 
#4

AW: Kann ich meine ListView beschleunigen (Icon laden dauert ewig)

  Alt 13. Nov 2018, 13:03
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?
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.555 Beiträge
 
Delphi 7 Professional
 
#5

AW: Kann ich meine ListView beschleunigen (Icon laden dauert ewig)

  Alt 13. Nov 2018, 13:28
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?
Weil dann jegliche Aktuallisierung des Bildschirmes / der Anzeige wegfällt. Und das dauert unter Windows halt.

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
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Kann ich meine ListView beschleunigen (Icon laden dauert ewig)

  Alt 13. Nov 2018, 13:46
Delphi-Quellcode:
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;
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.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#7

AW: Kann ich meine ListView beschleunigen (Icon laden dauert ewig)

  Alt 13. Nov 2018, 13:50
Niemals unsynchronisiert aus einem Thread heraus auf VCL-Controls zugreifen, das ist eine uralte Weisheit.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch
Online

Registriert seit: 11. Aug 2012
Ort: Essen
1.677 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: Kann ich meine ListView beschleunigen (Icon laden dauert ewig)

  Alt 13. Nov 2018, 14:38
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?
Weil dann jegliche Aktuallisierung des Bildschirmes / der Anzeige wegfällt. Und das dauert unter Windows halt.
Statt minimieren ginge vermutlich auch WM_SETREDRAW.
Thomas Mueller
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#9

AW: Kann ich meine ListView beschleunigen (Icon laden dauert ewig)

  Alt 13. Nov 2018, 14:58
OK letzter Tip.. Doublebuffer true?

gruss
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
1.001 Beiträge
 
#10

AW: Kann ich meine ListView beschleunigen (Icon laden dauert ewig)

  Alt 13. Nov 2018, 16:44
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?
Weil dann jegliche Aktuallisierung des Bildschirmes / der Anzeige wegfällt. Und das dauert unter Windows halt.

Ist 'ne langjährige praktische Erfahrung / Beobachtung, die man halt ausnützen kann, wenn was schneller gehen soll.
Ja, ist klar. Aber ist das nicht schon durch das ListView.BeginUpdate sichergestellt, dass aus diesem heraus keinerlei Zeichenvorgänge ausgelöst werden, solange ListView.EndUpdate nicht ausgeführt wird?

(Mal davon ausgehend, dass durch die Sammelroutine nicht noch andere Controls verändert werden).
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:10 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