Einzelnen Beitrag anzeigen

Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.130 Beiträge
 
Delphi 10.3 Rio
 
#43

AW: Memory leak durch funktion readln

  Alt 12. Mär 2015, 23:57
hmm wenn ich Deine Zahlen richtig sehen...

Blockwrite schneller als Streamwrite
StreamRead schneller als Blockread...

Komisch...

Aber Du hast natürlich sehr keine Blockgrößen genommen...

Delphi-Quellcode:
var
  Puffer : array [0..1024*1024*1024-1] of byte;

implementation

Uses System.Diagnostics;

procedure TForm42.Button1Click(Sender: TObject);
var
  F : File;
  FS : TFileStream;
  SW : TStopWatch;
  BR,ST : array[0..9] of Int64;
  I : Integer;
  Gelesen : Integer;
  Filename : String;

begin
  Filename := 'Big.iso';

  Memo1.Lines.Text := 'Lesen von '+(GetFilesize('Big.iso') / 1024).ToString+' KB - gelesen in Häppchen zu '+(Sizeof(Puffer) / 1024).ToString+' KB';


  for i:=0 to 5 do
    begin
      AssignFile(F,Filename);
      Reset(F,1);

      SW := TStopWatch.StartNew;
      SW.Start;

      repeat
        Blockread(F,Puffer[0],Sizeof(Puffer),gelesen);
      until gelesen = 0;

      SW.Stop;

      Closefile(F);

      BR[I] := SW.ElapsedMilliseconds;

      FS := TFileStream.Create(Filename,fmopenRead);
      SW := TStopWatch.StartNew;
      SW.Start;
      repeat
        gelesen := FS.Read(Puffer[0],Sizeof(Puffer));
      until gelesen = 0;
      SW.Stop;
      FS.Free;

      ST[I] := SW.ElapsedMilliseconds;
      Memo1.Lines.Add('Versuch '+i.ToString+' : Blockread('+BR[i].ToString+' ms) StreamRead('+ST[i].ToString+' ms)');

      Application.ProcessMessages;
    end;
end;
  Mit Zitat antworten Zitat