请教本代码,怎样加快运算速度. ( 积分: 50 )

  • 主题发起人 主题发起人 optn3
  • 开始时间 开始时间
O

optn3

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.Button14Click(Sender: TObject);
var
i,j,k,s,b1,b2:integer;
v:real;
st1,st2:string;
s1,s2,s3:TStringList;
begin
s1:=TStringList.Create;
s2:=TStringList.Create;
s3:=TStringList.Create;
s1.Text := memo8.Text;
s2.Text := memo12.Text;

for i := 0 to s2.Count -1 do
begin
b1:=0;
b2:=0;
s:=0;
st1:= ansimidstr(s2.Strings ,0,2);
st2:= ansimidstr(s2.Strings ,4,2);
for j := 0 to s1.Count -1 do
begin
if pos(st1,ansimidstr(s1.Strings[j] ,9,17))>0 then
begin
b1:=b1+1;
end;
if pos(st2,ansimidstr(s1.Strings[j] ,9,17))>0 then
begin
b2:=b2+1;
end;
if (pos(st1,ansimidstr(s1.Strings[j] ,9,17))>0) and (pos(st2,ansimidstr(s1.Strings[j] ,9,17))>0) then
s := s+1;
end;
if s >=1 then
begin
v := s/(b1+b2)*2*100;
// memo11.Lines.Add(s2.Strings+' := '+formatfloat('00.000',v));
s3.Add(s2.Strings+' := '+ floattostr(SimpleRoundTo(v,-3)));
end;
end;
memo11.Clear;
memo11.Text := s3.Text;
s3.Clear;
s1.Free;
s2.Free;
s3.Free;
end;
 
提示一下:
1)以空间换时间,ansimidstr(s1.Strings[j] ,9,17))可以用一个变量保存;
2)判断分支用else效率会高些;
3)b1:=b1+1。。。s := s+1;用Inc(b1); ..Inc(s)会有效些

恐怕也没有更好的方法来提高速度了。
 
我认为你的程序需要加上一个TRY...EXCEPT可以提高容错性
 

Similar threads

后退
顶部