算法优化,一段理论上可行的代码,求优化。解决方案

算法优化,一段理论上可行的代码,求优化。
Delphi(Pascal) code


begin
  SetLength(str,Memo2.Lines.Count,2);
  for I := 0 to Memo2.Lines.Count - 1 do
    begin
     str2:=SplitString(Memo2.Lines[i],#9);
      str[I,0]:=str2[0];
      str[I,1]:=str2[1];
    end;

  for i := 0 to Memo1.Lines.Count - 1 do
    begin
    if Memo1.Lines[i]<>'' then
      begin
        ReStr:='';
        for n := low(str) to High(str)  do
          begin
            if Trim(Memo1.Lines[i])=str[n,0] then
              begin
                ReStr:=Memo1.Lines[i]+#9+str[n,1];
                Continue;
              end;
          end;
        if ReStr<>'' then
          begin
            Memo1.Lines[i]:=ReStr;
          end else
          begin
            Memo1.Lines[i]:=Memo1.Lines[i]+#9+'未找到数据';
          end;
        Application.ProcessMessages;
        Gauge1.MinValue:=0;
        Gauge1.MaxValue:=Memo1.Lines.Count;
        Gauge1.Progress:=gauge1.Progress+1;
      end;

    end;

end;
上面是本人写的,数据量小的时候还行,但是数据上万条以后,基本上就无法使用了,具体情况如下:
memo1中内容
AA01
AA01
AA02
AA03
AA05
AA10
AA02
AA02
。。。。。至万条



memo2中内容
AA01    张三
AA02    王是
AA03    李而
AA04    李而
AA05    李而
AA06    李X
AA07    李V
AA08    李S
AA09    李W
AA10    李XXX
AA11    李SS
AA12    李WW
AA13    李RR
AA14    李AA
AA15    李QQ
AA16    李TT
AA17    李YY
至。。。。几百条

比对完毕的结果
在memo1中显示为
AA01   张三
AA01   张三
AA02   王是
AA03   李而
AA05   李U
AA10   李XXX
AA02   王是
AA02   王是

求大侠给优化一下,另外不用数据库什么的。单纯程序内比对。谢谢


















------解决方案--------------------
楼上已经指出了问题所在
即使是下面简单的这2句,也是比蜗牛还慢,何况还有其它的开销:
for i:=0 to 10000 do
memo2.lines[i]:='未找到';

帮你把demo写出来,10000笔数据差不多2秒搞定,能接受的了吧;
还有其它更快的办法暂不告诉你,能适用数据更多的情况,你的问题用下面的方法就够了!!!

SQL code
procedure TForm1.Button1Click(Sender: TObject);
const space='    ';{这里的空格根据你的Memo2中ID和Name之间空格决定,自己改合适的}
var
  i,j:Integer;
  TmpStr:string;
  sList:TStringList;
begin
  sList:=TStringList.Create;
  try
  for i:=0 to Memo1.Lines.Count-1 do
  begin
    TmpStr:=Memo1.Lines[i]+space;
    j:=pos(TmpStr, Memo2.Text);
    if j >0 then
      TmpStr:=Memo2.Lines[SendMessage(Memo2.Handle,EM_LINEFROMCHAR,j,0)]
    else
      TmpStr:=Memo1.Lines[i]+space+'未找到' ;

    sList.Add(TmpStr)
  end;
  Memo1.Lines.Assign(sList);

  finally
    sList.Free;
  end;
end;