Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Datei schnell in VST laden (https://www.delphipraxis.net/113537-datei-schnell-vst-laden.html)

kng 9. Mai 2008 13:12


Datei schnell in VST laden
 
Hallo,

Ich arbeite heute zum ersten mal mit dem Virtual String Tree und habe bis jetzt nur das DP Stammtisch Video gesehen.

Jetzt wollte ich zum testen mal die Zeilen einer Datei in erste Spalte schreiben.

Das habe ich so gemacht:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  F: TextFile;
  sLine: string;
begin
  AssignFile(F, 'C:\test.txt');
  try
    Reset(F);
    try
      VST.BeginUpdate;
      try
        while not EOF(F) do
        begin
          ReadLn(F, sLine);
          String(VST.GetNodeData(VST.AddChild(nil))^) := sLine;
        end;
      finally
        VST.EndUpdate;
      end;
    finally
      CloseFile(F);
    end;
  except

  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  vst.NodeDataSize := SizeOf(String);
end;

procedure TForm1.vstGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
  Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
begin
  CellText := String(VST.GetNodeData(Node)^);
end;
Ist es so richtig, oder kann man es auch besser machen?
Ich finde, dass es sehr langsam und nicht sehr effektiv ist.

Danke!

toms 10. Mai 2008 17:56

Re: Datei schnell in VST laden
 
Hallo, wie viele Zeilen hat die Datei / Wie viele Sek. dauert der Ladevorgang?

generic 10. Mai 2008 21:12

Re: Datei schnell in VST laden
 
ich denke das problem wird die schleife sein.
speziell diese zeile:
Delphi-Quellcode:
String(VST.GetNodeData(VST.AddChild(nil))^) := sLine;
da hier der speicher jedesmal für den string reserviert wird und sline einkopiert wird.

wenn du die zeilenanzahl kennst solltest du den vst über rootnodecount und initnode befüllen, bei gleichzeitiger shortstring nutzung und den records.
so würde der benötigte platz auf einmal reserviert werden.

Nuclear-Ping 10. Mai 2008 21:21

Re: Datei schnell in VST laden
 
Warum wird denn nicht VST.LoadFromFile / .SaveToFile zusammen mit den OnLoadNode- / OnSaveNode-Events verwendet? :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:16 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