我做的一个工作是:
遍历一个txt文件,数据大概有三千条之多,然后一条一条的与数据库中的一个表里的信息的某个字段比较,数据库里的信息大概有5千多条。一次性比较完。
现在的问题是,当程序执行时,像无响应一样,而且进程中也是无响应的提示,但实际上是在运行着的。
如果能解决这个问题呢?

解决方案 »

  1.   

    可以使用线程,或者在你的循环里加入这行代码 Application.ProcessMessages;
      

  2.   

    一个好的程序必须要有好的设计、良好的算法才是软件的核心竞争力!给你一个范例:
    var
      ll:TStringList;
      i:integer;
      tempado:TAdoquery;
    begin
      ll:=TStringList.create;
      tempado:=TAdoquery.Create(self);
      try
        tempado.ConnectionString:='...';
        tempado.SQL:='...';
        tempado.Open;
        ll.LoadFromFile('c:\test.txt');
        screen.Cursor:=crhourglass;
        tempado.First;
        while not tempado.Eof do
        begin
          application.ProcessMessages;
          for i:=0 to ll.Count-1 do
          begin
            if tempado.FieldByName('aa').asstring=ll.Strings(i) then
            begin
              ...
            end;
          end;
          tempado.Next;
        end;
      finally
        screen.Cursor:=crdefault;
        tempado.Free;
        ll.Free;
      end;
    end;说明:
    1、用stringlist访问文件速度超快
    2、数据集放在循环外面可大大提高速度你运行以上程序看是不是飞快,比你的程序快几十倍一点不奇怪
      

  3.   

    Application.ProcessMessages; 
    就可以了。
      

  4.   

    先看看程序中的SQL语句,然后检查相关表中是否建立了正确的索引,有索引和没有的性能会差很多的。
    然后再考虑多线程,一般多线程也是很费资源的。
      

  5.   

    1、用stringlist访问文件速度超快 
    2、数据集放在循环外面可大大提高速度 
    你运行以上程序看是不是飞快,比你的程序快几十倍一点不奇怪
    ------------------------------------------------
    的确,飞一般的感觉