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;
另注:我把循环中所以的代码去掉,只留下用标签显示进度,都很慢,速度是不去掉任何代码差不多。
数据是从数据库中读的,这里没写出来。
另外,不用数据库,用文本会不会快些呢?
全分奉送,务请高手指点!!!
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;
另注:我把循环中所以的代码去掉,只留下用标签显示进度,都很慢,速度是不去掉任何代码差不多。
数据是从数据库中读的,这里没写出来。
另外,不用数据库,用文本会不会快些呢?