Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   TListview Aktualisierung durch Thread(s) optimieren? (https://www.delphipraxis.net/160270-tlistview-aktualisierung-durch-thread-s-optimieren.html)

delphinub23 5. Mai 2011 12:27

TListview Aktualisierung durch Thread(s) optimieren?
 
Hallo Delphianer,

ich habe eine TListview in der ca. 50 - 100 Items angezeigt werden.
Dieser TListview soll in einem Intervall(z.B.: 3 sek anhand eines TTimer) aktualisiert werden.

Dadurch, dass alle Items neu eingelesen und verarbeitet werden, geht die Perfomance etwas verloren, d.h. die Applikation hängt während der Aktualisierung.

Bekomme ich durch die Verwendung eines TThread, in dem die Funktion ausgelagert wird, eine Optimierung der Perfomance heraus?

Hinweis: Es ist leider notwendig das Control TListview zu verwenden.

MfG,
dnub

DeddyH 5. Mai 2011 12:34

AW: TListview Aktualisierung durch Thread(s) optimieren?
 
Für die paar Items lohnt es sich IMO kaum, einen Thread zu verwenden. Hast Du bereits BeginUpdate und EndUpdate eingesetzt?

WladiD 5. Mai 2011 12:35

AW: TListview Aktualisierung durch Thread(s) optimieren?
 
Natürlich kann es durch Threads beschleunigt werden, wenn bei der Aktualisierung blockierende Operationen vorkommen (z.B. Netzwerkabfragen).

Falsch angewendet kann man aber auch das Gegenteil erreichen :wink:

Was passiert denn genau in deiner Aktualisierungsroutine?

Bernhard Geyer 5. Mai 2011 12:39

AW: TListview Aktualisierung durch Thread(s) optimieren?
 
Wie verwendest du das ListView? Verwendest du Begin/EndUpdate bzw. den Virtual Modus?

Die eigentliche Aktualisierung des GUI-Controls geht nicht da Win32-GUI-Ressourcen (und damit die VCL) eine Thread-Affinität auffweisen und nur im erzeugenden Thread darauf zugegriffen werden darf.

delphinub23 5. Mai 2011 12:44

AW: TListview Aktualisierung durch Thread(s) optimieren?
 
Ja, ich habe bereits BeginUpdate/EndUpdate verwendet nur leider mit mäßigem Erfolg. TListview im VirtualMode ist mir bisher nicht bekannt bzw. die Anwendung ist mir nicht bekannt.

Ich leere das TListview, danach lese ich meine Inhalte ein und schreibe diese innerhalb einer Schleife in das TListview.

Viewmode: vsReport

Bernhard Geyer 5. Mai 2011 12:45

AW: TListview Aktualisierung durch Thread(s) optimieren?
 
Wie lange dauert das reinschreiben? Oder ist evtl. die aktion zum Einlesen der Inhalte der Bremser?

DeddyH 5. Mai 2011 12:46

AW: TListview Aktualisierung durch Thread(s) optimieren?
 
Wie befüllst Du die ListView (Code)? Evtl. hast Du ja einfach nur versehentlich eine Bremse eingebaut.

delphinub23 5. Mai 2011 12:48

AW: TListview Aktualisierung durch Thread(s) optimieren?
 
Also GetTickCount gibt mir für das Einlesen der Daten und setzen der Daten in den TListview 400ms zurück.

delphinub23 5. Mai 2011 12:49

AW: TListview Aktualisierung durch Thread(s) optimieren?
 
Das Einlesen der Daten erfolgt über eine Schleife, welche in einer 2ten Schleife läuf, und die Daten ins TListview einträgt (via Item.Add).

Hier der 'langsame Code':

Delphi-Quellcode:
for i := 0 to Pred(Handler.GetAllDataSets.Count) do
begin
  Source := Handler.GetAllDataSets.Strings[i];
  AData := Handler.GetData(Data);
  begin
    lvListItem := lv.Items.Add;
    lvListItem.SubItems.Add(Source);
    lvListItem.SubItems.Add(IntToStr(AData));
    lvListItem.SubItems.Add(Handler.Interpret(Handler.MyData(AData)));
  end;
end;

Bernhard Geyer 5. Mai 2011 12:53

AW: TListview Aktualisierung durch Thread(s) optimieren?
 
Zitat:

Zitat von delphinub23 (Beitrag 1099022)
Also GetTickCount gibt mir für das Einlesen der Daten und setzen der Daten in den TListview 400ms zurück.

Und aufgeteil in Einlesen und Eintragen in Listview?


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:07 Uhr.
Seite 1 von 2  1 2      

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