Einzelnen Beitrag anzeigen

Benutzerbild von Helmi
Helmi

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

Welcher Ablauf ist schneller bei WriteBuffer?

  Alt 20. Sep 2006, 15: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