AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Welcher Ablauf ist schneller bei WriteBuffer?
Thema durchsuchen
Ansicht
Themen-Optionen

Welcher Ablauf ist schneller bei WriteBuffer?

Ein Thema von Helmi · begonnen am 20. Sep 2006 · letzter Beitrag vom 20. Sep 2006
Antwort Antwort
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.323 Beiträge
 
Delphi XE2 Professional
 
#1

Welcher Ablauf ist schneller bei WriteBuffer?

  Alt 20. Sep 2006, 16:30
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:
      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 schreib ich ja zuerst alles in einen String und schreib dann diesen String mit "WriteBuffer" in die Datei.

Jetzt hätt ich mir vorgestellt, dass es auch so ginge und das dies schneller sei:
Delphi-Quellcode:
      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;
(ungetestet)

Denn so schreib ich nicht erst alles in einen String, sondern gleich in die Datei.

Welche Möglichkeit ist schneller?
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Welcher Ablauf ist schneller bei WriteBuffer?

  Alt 20. Sep 2006, 16:49
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
  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 18:45 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