Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Streams: welche BufSize? (https://www.delphipraxis.net/81688-streams-welche-bufsize.html)

stoxx 2. Dez 2006 13:18

Re: Streams: welche BufSize?
 
man kann allerdings so einen TWriter auch zum blockorientierten Schreiben und Lesen von Dateien benutzen.
Und das geht um Welten schneller als TFilestream ohne TWriter und TReader.
Mal ein Beispiel wo records in ein File geschrieben werden

Delphi-Quellcode:
procedure Tzigzag.SaveZZToFile(const FileName : String);
var
  schenkel : TPSchenkel;
  stream : TFileStream;
  writer : TWriter;
  i : Integer;
  size : Integer;
begin
  if Filename = '' then exit;

  size := SizeOf(TSchenkel);
  stream := TFileStream.Create(FileName,fmCreate or fmShareDenyWrite);
  try
    writer := TWriter.Create(stream,BufferSize);
    try

      for i := 0 to flist.Count - 1 do
      begin
        schenkel := Flist[i];
        writer.Write(schenkel^, size);
      end;


    finally
      writer.Free;
    end;
  finally
    stream.Free;
  end;


end; //  SaveToFile (Tzigzag)

stoxx 15. Jan 2010 14:35

Re: Streams: welche BufSize?
 
ich finde, dieses geniale Beispiel sollte nicht einfach so untergehen :-)
vor allen Dingen diese tolle Verwendung von Entwurfsmustern ...

hier nochmal der richtige Platz, um es zu würdigen :-)

von hier


http://www.delphipraxis.net/internal...t.php?t=146438

Verions 1.7

http://andorra.cvs.sourceforge.net/v...s?revision=1.7



Delphi-Quellcode:
uses
  ..., AdBuffer;

var
  fs: TFileStream;
begin
  fs := TFileStream.Create('C:\test.mp3', fmCreate);
 
  QueryBufferedStream(fs);

  //Gebuffert auf den Stream zugreifen...

  FreeBufferedStream(fs);

  fs.Free;
end;

p80286 15. Jan 2010 15:25

Re: Streams: welche BufSize?
 
Auch wenn wir hier kurz vor einem Glaubenskrieg stehen:

ich kenne meine Daten (Buffer) wenn ich sie in eine Datei schreiben will, dann mach ich das mit
Delphi-Quellcode:
MyFilestream.write(buffer,sizeof(Daten))

oder

MyFilestream.write(buffer,sizeof(Buffer))
und gleiches gilt auch für .read.

der buffer sollte nach Möglichkeit n*Cluster/Sektorgröße sein um unnötigen Traffic zu vermeiden.

Warum sollte der TReader/TWriter schneller sein als die oben aufgezeigte Möglichkeit?
Wenn er mit Typen/Klassen umgehen kann, ist das ja manchmal hilfreich, aber wenn es "nur" darum geht Daten zu schaufeln eigentlich überflüssig!?

Gruß
K-H


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

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