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 2 von 5     12 34     Letzte »    
Hobbycoder

Registriert seit: 22. Feb 2017
930 Beiträge
 
#11

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
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#12

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

  Alt 13. Nov 2018, 13:09
Zitat:
wenn die fertig ist einen Thread starten der dann poe á poe Icons cached und in ListView das Index dafür setzt.
Warum so kompliziert und nicht einfach die Icons in eine ImageList stecken. Meinet wegen sogar in einem Thread. Aber das ge-cache bringt mal gar nix verglichen zu einer ImageList.
Zitat:
und zusätzlich noch das Minimize btw. Restore mehr Geschwindigkeit bringen soll?
Ich stelle mir gerade ein Programm vor, das sich einfach während der Nutzung mal minimiert und wieder maximiert. Sähe sehr vertrauenswürdig aus
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#13

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.685 Beiträge
 
Delphi 11 Alexandria
 
#14

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.540 Beiträge
 
Delphi 11 Alexandria
 
#15

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
EWeiss
(Gast)

n/a Beiträge
 
#16

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

  Alt 13. Nov 2018, 13:55
Zitat:
TThread.Synchronize (TThread.CurrentThread, procedure ()
begin
end);
Nun ja man muss da schon etwas zwischen pappen und zwar die Funktion die vom Mainthread verwendet wird um die Icons zu Zeichen.
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

Geändert von EWeiss (13. Nov 2018 um 13:59 Uhr)
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#17

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

  Alt 13. Nov 2018, 13:56
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.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

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

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

  Alt 13. Nov 2018, 13:56
Niemals unsynchronisiert aus einem Thread heraus auf VCL-Controls zugreifen, das ist eine uralte Weisheit.
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
          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;
Danke, ich habe es auf diese Weise korrigiert aber das Problem besteht immer noch, ich finde meinen Fehler nicht.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#19

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

  Alt 13. Nov 2018, 14:00
DeddyHs Hinweis auf alle VCL-Controls anwenden und nicht nur auf eine Zeile?
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#20

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

  Alt 13. Nov 2018, 14:01
Zitat:
Danke, ich habe es auf diese Weise korrigiert aber das Problem besteht immer noch, ich finde meinen Fehler nicht.
Lies noch mal meinen Beitrag..
Du verwendest SendMessage besser wäre PostMessage wenn du nicht warten willst.

Zitat:
DeddyHs Hinweis auf alle VCL-Controls anwenden und nicht nur auf eine Zeile?
Richtig der ganze kram mit dem Icon erstellen usw.. muss da rein.
Du kannst TThread wie eine normale procedure behandeln falls du das nicht weist.

Delphi-Quellcode:
TThread.Synchronize (TThread.CurrentThread,
procedure ()
var
// Meine Variablen
begin
// Meine Funktion
end);
gruss

Geändert von EWeiss (13. Nov 2018 um 14:06 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    


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 03:10 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