AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TTreeView komige Speedprobleme...

Ein Thema von DelTurbo · begonnen am 26. Aug 2011 · letzter Beitrag vom 10. Sep 2011
Antwort Antwort
Alaitoc

Registriert seit: 24. Okt 2008
263 Beiträge
 
Delphi 7 Enterprise
 
#1

AW: TTreeView komige Speedprobleme...

  Alt 28. Aug 2011, 12:44
Eigentlich wurden hier genug Vorschläge gebracht woran es liegen könnte, wobei es wahrscheinlich wirklich nicht an der Hardware liegt oder direkt an der Komponente TTreeview, sondern einfach an den unterschiedlichen Prozessen die im Hintergrund laufen, Dienste die ebenfalls behindern könnten oder sonstige unterschiede beim Betriebssystem, wie vll. sogar Servicepacks oder sonstige Updates, wer weiß?

Zitat:
Zitat:
Zitat von Luckie:
Also wenn du die Anzahl der zu erst erstellten Einträge reduzierst, solltest du auch auf dem langsamen Rechner gute Zeiten bekommen. Und warum es langsamer ist? Andere Hardware (weniger RAM, ...) oder es laufen einfach mehr Prozesse, so dass dein Prozess weniger Rechenzeit bekommt. Da kann es ein paar Gründe geben. Aber was willst du bei einem Kunden/Benutzer machen? Willst du ihm sagen, er soll Windows neu installieren und keine weiteren Programm außer deinem?

Also optimiere das ganze, so dass erst mal nur die wirklich benötigten Einträge gemacht werden und die weiteren erst bei Bedarf.
Nochmal sorry. Aber würdest du mal richtig lesen, dann würdest du feststellen das ich das auch auf der gleichen Hardware getestet habe (Post #6). Ich habe es hier auf 6 Rechnern getestet. Angefangen vom 1,5Ghz bis zum dem hier (i5-760). Dieses Speedprob tritt nur auf einem BetriebsSystem auf. Es kann sein das es noch bei anderen objekten auftritt. Das weiß ich natürlich nicht. Es ist mir halt nun beim TreeView aufgefallen.
Er hat zum Beispiel nicht nur die Hardware genannt, zusätzlich Prozesse oder sonstige Software, bzw. Fehler am Betriebssystem.

Ändere es doch einfach auf VirtualTreeview um, wenn es dann auf deinen schnellen Testrechnern in einer Sekunde läuft und auf dem langsamen Rechner ein paar Sekunden mehr dauert, wirst du dich auch nicht mehr mit dem Problem auseinandersetzen müssen.

Zitat:
Da anscheinden jeder nur ein Post liest, und meint antworten zu müssen ist der Thread hier total versaut. Es wird sich wohl kaum noch jemand die mühe machen 19 Posts zu lesen, wovon die meisten am eigentlichen problem vorbeigehen. Ich glaube der einzige hier der bissl begriffen hat worum es geht ist FredlFesl (Post #13).

Eigentlich sehr sehr schade.......
Ich behaupte jetzt einfach mal alle relevanten Informationen aus dem Thread herausgezogen zu haben, jedoch hätte ich diese Nachricht wohl am Anfang des Threads gelesen...hätte ich direkt aufgehört mich mit dem Thema auch nur ein wenig auseinanderzusetzen.
Wenn jemand wirklich den ganzen Thread nicht gelesen hat, kann man ihn einfach höflich darauf hinweisen was er übersehen hat.

MfG Alaitoc
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.245 Beiträge
 
Delphi 2007 Architect
 
#2

AW: TTreeView komige Speedprobleme...

  Alt 28. Aug 2011, 12:59
wie vll. sogar Servicepacks oder sonstige Updates, wer weiß?
Genau darum geht es. Ich dachte das sowas schonmal einer hatte. Dann hätte ich gezielt suchen können. Es hat ja im grunde nichts mit dem eigentlichen TreeView zu tun. Es ist mir da halt nur aufgefallen. Es kann ja sein das noch andere sachen betroffen sind.

Ich hätte auf Kaspersky getippt. Aber der ist das nicht.
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Alaitoc

Registriert seit: 24. Okt 2008
263 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: TTreeView komige Speedprobleme...

  Alt 28. Aug 2011, 13:14
Sobald man bei Delphi mehrere Einträge für ne TreeView hat, sollte man lieber auf die Alternative VirtualTreeview wechseln. Keine Ahnung wie sie im Vergleich zu anderen Standard-Delphi Komponenten steht, jedoch ist sie im Vergleich zu der VirtualTreeview Alternative deutlich langsamer.

Das hatte ich ja schon bei meiner eigenen TTreeview-Dropdown-Komponente gemerkt (welche auf TTreeview basiert) dass es da relativ schnell zu Performance Einbußen kommt.

Falls du wirklich die Ursache herausfinden willst kannste ja mal alles nach und nach von deinem Rechner werfen *g*

MfG Alaitoc

Edith sagt: Ebenfalls einen schönen Sonntag

Geändert von Alaitoc (28. Aug 2011 um 13:15 Uhr) Grund: Nachtrag
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#4

AW: TTreeView komige Speedprobleme...

  Alt 28. Aug 2011, 15:19
Auch wenn der Thread jetzt vielleicht "vorbei" ist möchte ich noch meine Meinung schreiben. Ersteinmal muss ich mschaefer beipflichten - wenn etwas auf ein und dem selben PC in der VM schneller läuft, als auf der realen Hardware, kann irgendetwas nicht stimmen. Vielleicht wirklich neu aufsetzen.
Dazu kommt noch, dass ich das TTreeView nur bei Dingen einsetze, die nur wenige Einträge haben. Es ist nicht nur langsam, teilweise gibt es auch ein lustiges Flackern, wenn man die Maus über die Einträge bewegt. Ab und an verschwinden auch die Header (Spalten-Überschriften). TTreeView benutze ich selber nur für Darstellungen, die wenige Einträge haben und nicht die ganze Zeit sichtbar sind (wegen den Flackereffekten - z.B. nutze ich TTreeView/TListView in Einstellungsfenstern) - ansonsten setze ich an allen anderen Stellen auf TVirtualTreeView, das ist einfach DIE Komponente, um Listen oder Bäume darzustellen. Man muss sich zwar etwas einarbeiten, aber dafür bietet die Komponente fast unzählbare Möglichkeiten.
Danke, Herr Mike Lischke!
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"

Geändert von wicht (28. Aug 2011 um 15:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: TTreeView komige Speedprobleme...

  Alt 29. Aug 2011, 08:59
Hallo,

vielleicht hast du schon eine Lösung des Problems, dennoch habe ich ein zwei Anmerkungen, die ich hier auch noch anbringen möchte:

- Deine VM hat u.U. nicht die selbe Anzahl an Items wie Dein Hostsystem.

Wobei ich denke das es egal ist ob ich 10.000 oder 100.000 Items hinzufüge
- Es dauert sehr wohl länger 100.000 Einträge zu erzeugen gegenüber 10.000 (nämlich im einfachsten Fall genau um den Faktor 10) - da der Code der zum hinzufügen ausgeführt werden muss ja 10 mal häufiger durchlaufen wird.

Bezogen auf Deine Frage, warum es langsamer ist auf System A zu B würde ich somit das naheliegenste Wählen: Ich denke tatsächlich, dass der Geschwindigkeitsunterschied daher kommt, dass die gesamte Anzahl an Items sich in Host und VM unterscheiden.

Gruß, Chris

BTW:
Und eigentlich sollte es doch auch egal sein wie. Da ich immer die gleiche .exe zum messen nehme. Oder irre ich mich???
Das es absolut betrachtet Egal ist wie man einfügt glaube ich nicht spricht z.B. der Unterschied mit BeginUpdate und ohne. Relativ betrachtet - sprich immer die selbe exe - hast du sicher recht. Allerdings ist hier auch die Frage, wie stark das OS "Programmiereigenarten" kappselt / verbessert / verschlechtert. Ein XP geht mit machen Dingen sehr wohl anders um als z.B. ein Windows 7. Die selbe EXE kann sich dann auf zwei Systemen unterschiedlich verhalten und unterschiedliche Performance zeigen.
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: TTreeView komige Speedprobleme...

  Alt 28. Aug 2011, 13:08
Ich habe mal zum Vergleich eine ListBox getestet und war doch einigermaßen erstaunt, daß das TreeView (ohne Images) genaus so schnell ist wie diese. Scheint ein Aberglaube zu sein, daß TreeView stinklangsam ist. Auf jeden Fall auch viel schneller als ein Memo, aber das denke ich, ist klar.

Delphi-Quellcode:
procedure GetDirs(const Start: String; const SL: TStrings);
var
  S: TSearchRec;
  P: string;
  R: integer;
begin
  R:= FindFirst(Start+'*.*', faDirectory, S);
  while R = 0 do
  begin
    if ((S.Attr and faDirectory) <> 0) then
      if ((S.Name <> '.') and (S.Name <> '..')) then
      begin
        P:= Start+S.Name+'\';
        SL.Add(P);
        GetDirs(P, SL);
      end;
    R:= FindNext(S);
  end;
  Findclose(S);
end;


procedure GetNodeDirs(const ADirectory: String; var ATree: TTreeView; const Start: TTreeNode);
  function SlashSep(const Path, S: String): String;
  begin
    if AnsiLastChar(Path)^ <> '\then
      Result:= Path+'\'+S
    else
      Result:= Path+S;
  end;
var
  S: TSearchRec;
  N: TTreeNode;
  R: integer;
begin
  R:= FindFirst(SlashSep(ADirectory, '*.*'), faDirectory, S);
  while R = 0 do
  begin
    if ((S.Attr and faDirectory) <> 0) then
      if ((S.Name <> '.') and (S.Name <> '..')) then
      begin
        N:= ATree.Items.AddChild(Start, S.Name);
        GetNodeDirs(SlashSep(ADirectory, S.Name), ATree, N);
      end;
    R:= FindNext(S);
  end;
  Findclose(S);
end;


procedure TForm1.Button1Click(Sender: TObject); // ListBox
var
  fPath: string;
  fTime: Cardinal;
begin
  fPath:= 'C:\';
  ListBox1.Items.Clear;

  fTime:= GetTickCount;
  ListBox1.Items.BeginUpdate;
  GetDirs(fPath, ListBox1.Items);
  ListBox1.Items.EndUpdate;

  Label1.Caption:= IntToStr(GetTickCount-fTime);
end;


procedure TForm1.Button2Click(Sender: TObject); // TreeView
var
  fPath: string;
  fTime: Cardinal;
begin
  fPath:= 'C:\';
  TreeView1.Items.Clear;

  fTime:= GetTickCount;
  TreeView1.Items.BeginUpDate;
  GetNodeDirs(fPath, TreeView1, TreeView1.Items.AddChild(Nil, fPath));
  TreeView1.Items.EndUpDate;

  Label2.Caption:= IntToStr(GetTickCount-fTime);
end;


procedure TForm1.Button3Click(Sender: TObject); // StringList
var
  fPath: string;
  fTime: Cardinal;
  SL: TStringList;
begin
  fPath:= 'C:\';
  SL:= TStringList.Create;

  fTime:= GetTickCount;
  GetDirs(fPath, SL);
  Label3.Caption:= IntToStr(GetTickCount-fTime)+' ('+IntToStr(SL.Count)+')';

  SL.Free;
end;
  Mit Zitat antworten Zitat
Antwort Antwort


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 13:29 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