お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"レコード型データ読み書きTMemoryStreamh版"






nifty:FDELPHI/MES/16/1383 のサンプルのファイルの入出力をTMemoryStreamに変
更した物。
DataLoadfromFileとDataSaveToFileを下記の物に差し替えて使用。

自分の環境で試すと、
10万件で、読み込み7秒→0.2秒、書き込み1秒→0.1秒
の速度アップ。
※DataSaveToFile内のコメントをはずすとさらに高速化(ちょっとだけ)

デメリットとしては、読み書きの際にデータサイズと同じサイズのメモリをTemp領
域として要求すること。

procedure TForm1.DataLoadfromFile(FileName: String);
var
  TempStream: TMemoryStream;
  SData: PSdata;
  SizeOfRec: integer;
begin
  SizeOfRec := SizeOf(TSData);
  TempStream := TMemoryStream.Create;
  TempStream.LoadFromFile(FileName);
  try
    while TempStream.Position < TempStream.Size do begin
      New(SData);
      TempStream.ReadBuffer(SData^, SizeOfRec);
      SDataList.Add(SData);
    end;
  finally
    TempStream.Free;
  end;
  DrawGrid1.RowCount := SDataList.Count;
  DrawGrid1.ReFresh;
end;

procedure TForm1.DataSaveToFile(FileName: String);
var
  TempStream: TMemoryStream;
  SData: PSdata;
  i, SizeOfRec: integer;
begin
  SizeOfRec := SizeOf(TSData);
  TempStream := TMemoryStream.Create;
  try
//    TempStream.Size := SDataList.Count * SizeOfRec;
    for i := 0 to SDataList.Count-1 do
    begin
      SData := SDataList.Items[i];
      TempStream.WriteBuffer(SData^, SizeOfRec);
    end;
    TempStream.SaveToFile(FileName);
  finally
    TempStream.Free;
  end;
end;


                                     01/09/19(水) 09:12 HATENA(GFC03235)
 


- FDELPHI  MES(16):玉石混淆みんなで作るSample蔵【見本蓄積】 01/09/22 -

Original document by HATENA          氏 ID:(GFC03235)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum