![]() |
Welcher Ablauf ist schneller bei WriteBuffer?
Hallo Jungs,
ich hab mir grad mal wieder einen Code eines Programmes angeschaut, den ich schon vor längerem mal programmiert habe und da ist mir ein Teil aufgefallen, der mir vielleicht mal Probs bereiten könnte:
Delphi-Quellcode:
Jetzt schreib ich ja zuerst alles in einen String und schreib dann diesen String mit "WriteBuffer" in die Datei.
try
FileStream := TFileStream.Create(drive_MonitorLog, fmOpenReadWrite); with FileStream, ListView_CallingList do begin //ListView auslesen und zu einem String hinzufügen for i2 := 0 to Pred(i) do begin S_List := S_List + Items.Item[i2].SubItems.Strings[2] + ', ' + //Datum Items.Item[i2].SubItems.Strings[3] + ', ' + //Uhrzeit Items.Item[i2].Caption + ', ' + //Name Items.Item[i2].SubItems.Strings[0] + ', ' + //Nummer Items.Item[i2].SubItems.Strings[1] + ', ' + //Ort Items.Item[i2].SubItems.Strings[4] + #13#10;//MSN end; //FileStream-Position = FileStream-Größe Position := Size; //In die vorhandene Datei "Monitor.log" schreiben WriteBuffer(S_List[1], Length(S_List)); end; finally //FileStream freigeben und löschen FreeAndNil(FileStream); end; Jetzt hätt ich mir vorgestellt, dass es auch so ginge und das dies schneller sei:
Delphi-Quellcode:
(ungetestet)
try
FileStream := TFileStream.Create(drive_MonitorLog, fmOpenReadWrite); with FileStream, ListView_CallingList do begin //ListView auslesen und zu einem String hinzufügen for i2 := 0 to Pred(i) do begin S_List := Items.Item[i2].SubItems.Strings[2] + ', ' + //Datum Items.Item[i2].SubItems.Strings[3] + ', ' + //Uhrzeit Items.Item[i2].Caption + ', ' + //Name Items.Item[i2].SubItems.Strings[0] + ', ' + //Nummer Items.Item[i2].SubItems.Strings[1] + ', ' + //Ort Items.Item[i2].SubItems.Strings[4] + #13#10;//MSN //FileStream-Position = FileStream-Größe Position := Size; //In die vorhandene Datei "Monitor.log" schreiben WriteBuffer(S_List[1], Length(S_List)); end; end; finally //FileStream freigeben und löschen FreeAndNil(FileStream); end; Denn so schreib ich nicht erst alles in einen String, sondern gleich in die Datei. Welche Möglichkeit ist schneller? |
Re: Welcher Ablauf ist schneller bei WriteBuffer?
Ich denke, es ist egal welchen der beiden Codes du nimmst.
PS: nach mehrmaligem Lesen habe ich den Unterschied nun doch noch entdeckt. Tendenziell (für wachsendes i) ist der zweite Code schneller. Noch schneller wird das ganze vielleicht, wenn du ganz auf die String-Montage verzichtest und die einzelnen Strings gleich wegschreibst. Über welche Werte für i reden wir hier? Und denke an die golden rule: never change a running system. Grüße vom marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:18 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