全分奉送,救命!为什么这么慢?(81分)

  • 主题发起人 主题发起人 meng555
  • 开始时间 开始时间
M

meng555

Unregistered / Unconfirmed
GUEST, unregistred user!
用了ExParser控件计算表达式,表达式大约几百个,为什么速度这么慢,1600个数据,200个表达式计算要二分钟!实际我可能对上万个表达式计算,不行啊,怎么办,高手看下代码大概如下,哪有问题怎么能快如飞呢?

全分奉送,务请高手指点!!!

for i:=0 to 1600 do//循环数据
begin
AddVars(i);//设置变量
//Gauge1.Progress:=i;
Label1.Caption:=inttostr(i);
//循环计算所有变量表达式:
for j:=0 to li_gscount-1 do//循环计算每个表达式
begin
ls_1_gs:=memo2.Lines.Strings[j];//取表达式
ls_values:=CalExpr(ls_1_gs);//用上面设的变量计算表达式值
//记录计算结果
if stl_result.Count<j+1 then begin
stl_result.Add(ls_values);
end else begin
stl_result.Strings[j]:=stl_result.Strings[j]+ls_values;
end;
if StopCal then Exit;
Application.ProcessMessages;
end;
Application.ProcessMessages;
ls_values:='';
end;

另注:我把循环中所以的代码去掉,只留下用标签显示进度,都很慢,速度是不去掉任何代码差不多。
数据是从数据库中读的,这里没写出来。
另外,不用数据库,用文本会不会快些呢?
 
怎么没人帮忙啊??
 
你可以加入代码测试啊,看最费时间的是什么代码。这样可以决定你使用什么方式。
 
谢谢你啊,我测试了,加入一点就很慢,只留下用标签显示进度,都很慢。循环里什么都没有倒很快的。
所以不知道我什么东西没搞清,或用什么写法能快起来,我觉得不应该这么慢,可以做到很快的。暂时不说多线程的事。单线程怎么能快起来,我会再考虑多线程的。
 
把你从数据库读出来的数据一次性载入内存再做循环计算看看
是不是不断地连接数据库Open,close搞慢的?
 
哪位知道:有没有比ExParser控件速度更快的控件?要能计算IIF(x=y,1,0)形式的公式的?
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
927
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部