我有一些复杂的软件,我把它的延迟缩减到这段代码:
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的创建工厂
Inherited Create(AOwner);
提问时间: 查询ini文件时为什么Delphi会挂起? ini文件是一些大键,位于64k windows API限制。甚至OnCreate与此有什么关系呢?
INI限制和下行TIniFile类使用Windows API 这对INI文件施加了64KB的限制。如果你需要存储更多 超过64KB的数据,你应该使用TMemIniFile。
更新: 这么多评论都试图联系起来。
我说我责怪这段代码的原因,是一个简单的“试试看”。我删除了ini文件调用,从on创建,代码运行顺利,即时窗口打开。在onCreate上使用ini文件调用进行编译时,软件会挂起8秒。 将调用从onCreate移动到构造函数Create,代码运行顺畅。
ini文件是本地文件,它位于本地目录中,并且该软件是唯一一个调用此文件的文件,而不是网络文件。在驱动器c \ folder \ foler \ filename.ini,windows。
执行CheckBox1.Checked := true
,给出半秒延迟(快)。
做
with TIniFile.Create(Path + '\FileName.INI') do
try
finally
Free;
end;
半秒延迟,(快)。 购买放回代码仍然会产生8秒的延迟。 将代码从OnCreate移动到Constructor创建半秒延迟(快速)。
所以我不确定为什么会这样。