0

私はいくつかの複雑なソフトウェアを持っており、その遅延を次のコードにまとめました。

procedure Tform1.FormCreate(Sender: TObject);
begin
  inherited;
  with TIniFile.Create(Path + '\FileName.INI') do
    try
       CheckBox1.Checked :=ReadBool('Header','Key',true);
    finally
      Free;
    end;
end;

コードをデバッグするとき、デバッガーは TForm の Create ファクトリでハングしていることを示しました。

  Inherited Create(AOwner);

質問時間: ini ファイルを照会すると Delphi がハングするのはなぜですか? ini ファイルは数キー分大きく、64k Windows APIの制限に達しています。OnCreate でさえこれと何の関係があるのでしょうか?

INI の制限と欠点 TIniFile クラスは、INI ファイルに 64KB の制限を課す Windows API を使用します。64KB を超えるデータを格納する必要がある場合は、TMemIniFile を使用する必要があります。

更新: 非常に多くのコメントが関連しようとしています。

私がこのコードを非難する理由は、単純な「試してみる」ためだと言います。作成時にiniファイルの呼び出しを削除すると、コードがスムーズに実行され、インスタントウィンドウが開きます。onCreate で ini ファイル呼び出しを使用してコンパイルすると、ソフトウェアが 8 秒間ハングします。呼び出しを onCreate からコンストラクタ Create に移動したため、コードはスムーズに動作します。

ini ファイルはローカル ファイルであり、ローカル ディレクトリにあり、ネットワーク ファイルではなく、このファイルを呼び出すのはソフトウェアだけでした。ドライブ c\folder\foler\filename.ini、windows にあります。

を実行するCheckBox1.Checked := trueと、0.5 秒の遅延 (高速) が得られます。やっている

  with TIniFile.Create(Path + '\FileName.INI') do
    try

    finally
      Free;
    end;

0.5 秒の遅延 (高速)。コードを元に戻すと、8 秒の遅延が発生します。コードを OnCreate から Constructor Create に移動すると、0.5 秒の遅延 (高速) が発生します。

なぜこれが起こっているのかわかりません。

4

0 に答える 0