【发布时间】:2011-03-04 07:43:25
【问题描述】:
我有一个简单的程序,可以根据每行单词的长度对文本文件进行排序 这个程序在我基于 xp 的旧机器上运行没有问题 现在我在我的新 win7/intel core i5 机器上运行这个程序,它会冻结整个系统并在完成工作后恢复正常。
我研究了代码并找到了导致冻结的行
就是这行……
caption := IntToStr(i) + '..' + IntTostr(ii);
我已经改成
caption := IntTostr(ii); //slow rate change
没有冻结
然后我把它改成了
caption := IntTostr(i); //fast rate change
它再次冻结
我的程序代码是
var tword : widestring;
i,ii,li : integer;
begin
tntlistbox1.items.LoadFromFile('d:\new folder\ch.txt');
tntlistbox2.items.LoadFromFile('d:\new folder\uy.txt');
For ii := 15 Downto 1 Do //slow change
Begin
For I := 0 To TntListBox1.items.Count - 1 Do //very fast change
Begin
caption := IntToStr(i) + '..' + IntTostr(ii); //problemetic line
tword := TntListBox1.items[i];
LI := Length(tword);
If lI = ii Then
Begin
tntlistbox3.items.Add(Trim(tntlistbox1.Items[i]));
tntlistbox4.items.Add(Trim(tntlistbox2.Items[i]));
End;
End;
End;
end;
知道为什么吗?以及如何解决? 我用的是delphi 2007/win32
【问题讨论】:
-
TntListBox1 中有多少项?
-
您是否考虑过在循环过程中使用 TStringLists,然后一步将它们分配给列表框?这可能会更快一些。如果您必须支持 Unicode,您可以在 www.soft-gems.net 找到一个 TWideStringList
-
Uwe : 使用 tWidetringlist 只会加快进程,但不会解决冻结问题。
-
avar:这就是为什么我把它作为评论而不是答案。