私はいくつかの複雑なソフトウェアを持っており、その遅延を次のコードにまとめました。
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 秒の遅延 (高速) が発生します。
なぜこれが起こっているのかわかりません。