AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Streams: welche BufSize?

Ein Thema von Cöster · begonnen am 1. Dez 2006 · letzter Beitrag vom 15. Jan 2010
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#11

Re: Streams: welche BufSize?

  Alt 2. Dez 2006, 14:18
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)
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#12

Re: Streams: welche BufSize?

  Alt 15. Jan 2010, 15:35
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;
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#13

Re: Streams: welche BufSize?

  Alt 15. Jan 2010, 16:25
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 17:46 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