Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   VirtualStringTree - Nodes hinzufügen (https://www.delphipraxis.net/179669-virtualstringtree-nodes-hinzufuegen.html)

Popov 25. Mär 2014 18:28

AW: VirtualStringTree - Nodes hinzufügen
 
Ich weiß nicht, aber kann es sein, dass dir dein Virenscanner dazwischen redet? Je nach Virenscanner wird jede Datei die angepackt wird, wenn auch nur markiert im Explorer, gescannt. Was mir aufgefallen ist, dass dein Programm beim ersten Durchlauf etwa 6 Sekunden gebraucht hat, dann stets um die 600 ms. Falls du einen Virenscanner hast, schalte den mal für einen Test ab.

Ansonsten finde ich, dass dein Fenster etwas zäh ist, d. h. länger für den Aufbau braucht. Evtl. liegt das an deiner Komponente. Wendest du auch BeginUpdate und EndUpdate im Code?

d7user1 25. Mär 2014 18:32

AW: VirtualStringTree - Nodes hinzufügen
 
das könnte daran liegen dass ich den font und den hintergrund einfärbe und jeweils zwei icons pro node hinzufüge.

jawohl. nutze begin und endupdate.
wenn der letzte node erreich ist, rufe ich aber einmal VST.Invalidate auf da sonst, wenn zu wenige nodes vorhanden sind (keine scrollbar), die nodes nicht eingefärbt werden.

sehr interessanter ansatz mit dem virenscanner. aber mit ausgeschaltetem und eingeschaltetem virenscanner benötigt die testanwendung 4.5 sekunden. seltam.

Popov 25. Mär 2014 18:50

AW: VirtualStringTree - Nodes hinzufügen
 
Nun, das könnte alles ein Grund sein, aber mein Beispiel nutzt das nicht und braucht bei dir auch 5 Sekunden.

d7user1 25. Mär 2014 19:21

AW: VirtualStringTree - Nodes hinzufügen
 
ja, das ist sehr seltsam.
auch seltsam ist dass mein beispiel bei dir das erste mal länger braucht als danach.

aber wie bereits gefragt, kann es sei dass das daran liegt dass ich einen laptop benutze?

Popov 25. Mär 2014 19:50

AW: VirtualStringTree - Nodes hinzufügen
 
Reduzieren wir alles auf das Nötigste. Führe mal den Code aus und gibt das Ergebnis aus der Zwischenablage hier zurück:
Delphi-Quellcode:
uses
  DateUtils, Clipbrd;

procedure Test(SearchPath: String; var Sum: Integer);
var
  SearchRec: TSearchRec;
begin
  SearchPath := IncludeTrailingPathDelimiter(SearchPath);

  if FindFirst(SearchPath + '*.*', faAnyFile or faDirectory, SearchRec) = 0 then
  try
    repeat
      Inc(Sum);
    until FindNext(SearchRec) <> 0;
  finally FindClose(SearchRec) end;

  if FindFirst(SearchPath + '*.*', faDirectory, SearchRec) = 0 then
  try
    repeat
      if ((SearchRec.Attr and faDirectory) = faDirectory) and
        (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then
        Test(SearchPath + SearchRec.Name, Sum);
    until FindNext(SearchRec) <> 0;
  finally FindClose(SearchRec) end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  T1, T2: TTime;
  A: Integer;
  s: String;
begin
  T1 := Now;
  A := 0;
  Test('c:\windows\', A);
  T2 := Now;

  s := Format('Anzahl Daten: %d; Zeit im Millisekunden: %d', [A, MilliSecondsBetween(T1, T2)]);
  ShowMessage(s);
  Clipboard.AsText := s; //kopiert Ergebnis in Zwischenablage
end;

d7user1 25. Mär 2014 20:04

AW: VirtualStringTree - Nodes hinzufügen
 
ok, also. programm (nur dieser code) wurde kompiliert und direkt mit der ide ausgeführt.

klick 1: Anzahl Daten: 119168; Zeit im Millisekunden: 4319

klick 2: Anzahl Daten: 119168; Zeit im Millisekunden: 4189

klick 3: Anzahl Daten: 119168; Zeit im Millisekunden: 4087

Popov 25. Mär 2014 20:23

AW: VirtualStringTree - Nodes hinzufügen
 
Dann liegt das am Zugriff und nicht an deinem Programm. Irgendwo gibt es eine Bremse.

Und Laptop? Ich kenne Probleme mit Laptops, aber keine diesbezüglich. Evtl. Überhitzung? Was sagt HD Tune? Keine Temperaturanzeige? Führe mal CrystalDiskInfo aus.

d7user1 25. Mär 2014 20:31

AW: VirtualStringTree - Nodes hinzufügen
 
HDTune sagt dass meine systemfestplatte 32°C warm ist. meine sekundäre festplatte welche verbaut ist ist 32°C warm. denke nicht dass das heiß wäre für einen laptop.

edit: ich melde mich in wenigen minuten nochmal, denn CrystalDiskInfo zeigt mir ganz neue optionen und informationen. z.b. lautstärke und performance-regler.

edit 2:
also. nach änderung dieser akustikeinstellungen auf "leistung" wird dein code, popov, nun in 3.8 sekunden (statt 4 bis 4.3)ausgeführt und meiner in 4.8 sekunden (statt 5 bis 6).

aber mehr passiert da nicht.

jaenicke 25. Mär 2014 21:30

AW: VirtualStringTree - Nodes hinzufügen
 
Also bei mir ist das mit einer Samsung 840er Evo SSD auch nicht schneller... 191.000 Dateien und 5-9 Sekunden (beim ersten Start die 9 Sekunden, logisch, danach weniger)...

d7user1 25. Mär 2014 21:43

AW: VirtualStringTree - Nodes hinzufügen
 
DAS gibt mir zu denken.
das bedeutet dass selbst eine SSD nicht viel schneller zu sein scheint und demnach das problem nicht bei mir liegt, da es eventuell gar keins gibt?

ich glaube ich muss in die klappsmühle.

warum erreichst du, popov, so gute zeiten und wir beide nicht?

Popov 25. Mär 2014 21:52

AW: VirtualStringTree - Nodes hinzufügen
 
Dann scheint mit meinem Rechner etwas nicht zu stimmen. Ich hab gerade andere Ordner getestet und einen mit 111000 Dateien gelesen, da hat er auch lange gebraucht, beim weiteren Mal aber in Millisekundenbereich. Ungeachtet dessen, der Windowsordner ist immer in 300 ms gelesen.

jaenicke 25. Mär 2014 22:27

AW: VirtualStringTree - Nodes hinzufügen
 
Zitat:

Zitat von Popov (Beitrag 1253501)
da hat er auch lange gebraucht, beim weiteren Mal aber in Millisekundenbereich.

Dann gehe ich mal davon aus, dass du noch XP nutzt. Denn XP hat Dateisuchen noch stärker zwischengespeichert, dafür waren dann bei Änderungen auf dem Datenträger auch manchmal Fehler in den Ergebnissen.

Zitat:

Zitat von Popov (Beitrag 1253501)
Ungeachtet dessen, der Windowsordner ist immer in 300 ms gelesen.

Bei XP enthält der auch nur ein Zehntel der Dateien wie bei mir Windows 8.1.

d7user1 25. Mär 2014 23:01

AW: VirtualStringTree - Nodes hinzufügen
 
bei windows 8.1 enthält der fast 200.000 dateien? wahnsinn. bei mir, windows 7, sind es etwas weniger als 100.000.

edit: ein test in einer windows-xp-vm hat ergeben, dass der erste durchlauf etwa 1.5 sekunden benötigt und alle danach 500ms etwa.

jaenicke 26. Mär 2014 05:02

AW: VirtualStringTree - Nodes hinzufügen
 
Zitat:

Zitat von d7user1 (Beitrag 1253511)
bei windows 8.1 enthält der fast 200.000 dateien?

101.000 sind es bei mir. Allerdings werden die ab Vista auch mit der Dateisuche wie sie hier gemacht wird auch doppelt gefunden, da da auch noch Junctions reinspielen.

Popov 26. Mär 2014 11:47

AW: VirtualStringTree - Nodes hinzufügen
 
Nun ja, 100.000 ist eine Sache, aber das Thema drehte sich ab Anfang um 13.000 Daten

Zoot 26. Mär 2014 12:31

AW: VirtualStringTree - Nodes hinzufügen
 
Auf meinem W7 braucht das Programm für 120.000 Dateien im Windowsverzeichnis auf einer SSD 2100 ms.

d7user1 26. Mär 2014 14:01

AW: VirtualStringTree - Nodes hinzufügen
 
Zitat:

Nun ja, 100.000 ist eine Sache, aber das Thema drehte sich ab Anfang um 13.000 Daten
genau. ich dachte 13.000 dateien nicht rekursiv seien genug anfangs.

Popov 30. Mär 2014 16:22

AW: VirtualStringTree - Nodes hinzufügen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Weiter vorne wurde kurz über CheckBoxen in Virtual ListView gesprochenm, dass sie nicht da sind (bei OwnerData = True), und dass es kompliziert ist sie selbst zu erstellen. Damals habe ich auch kurz nach einer Lösung im Internet gesucht und auch nur komplizierte gefunden, was die Aussage irgendwie bestätigte.

Dabei steht die simple Lösung in der Delphi-Hilfe in einem Nebensatz, bei Thema StateIndex. Man benötigt demnach zwei Check-Box Bitmaps in einer ImageList, die wiederum StateImages zugewiesen ist. Je nachdem wie wie der Wert von StateIndex ist, -1, 0 oder 1, wird entweder nichts gezeichnet (Standard), die eine Bitmap oder die andere (in dem Fall Bild von CheckBox). Was dann noch zu tun bleibt ist eine Routine schreiben die die CheckBoxem per Kausklick setzt. Ist auch nicht kompliziert. Im Grunde also alles simpel.

Hier das Beispiel (falls noch Interesse besteht). Vermutlich kann man das noch eleganter lösen, aber das ist auch nicht kompliziert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:23 Uhr.
Seite 2 von 2     12   

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