需要做一个程序,7×24运行的。主要功能就是检查数据库中的某几个表,如果有新的数据进来,则把新数据整理后,插入其他表中。然后把这个新数据的某个字段付值,这样下次就不会再处理这条数据了。为了有足够的表面按钮响应功能,把这个数据库的功能做在线程中了。但是发现程序运行后内存会越来越多,而且一直不会释放,测试的时候一条新数据都没有,但是内存还是越来越高。数据库是sql2000或msde各位有什么建议?

解决方案 »

  1.   

    用过2种方式测试1. 用完就释放,下次需要用时再create.
    2. 连接数据库时马上就create 3个adoquery 和3个adocommand,以后所有的操作都用这6个东西完成,不再程序中在另外create ado了。当然,用完还是会close。
    效果差不多
      

  2.   

    这种情况应该用线程池,可以有效控制资源lz可以找 僵哥,LiangPei2008问一下,他们在这方面很Nb
      

  3.   

    考虑用存储过程实现,然后用job定时执行。
    或者用触发器来实现(但这个比较费资源)
      

  4.   

    在MSSQL 2000中那几个表使用触发器,根本不用写程序
    附:如果没有新数据插入也内存越来越高,考虑是否有内存未释放
      

  5.   

    这种应用写一个存储过程不就好了?线程式只需要调用存储过程,然后在存储过程当中不断循环操作.或者写一个数据库的JOB.只是需要注意数据库锁的应用,以防止死锁现象的产生即可.
      

  6.   

    另外,可以先在你的线程式的Execute当中前后分别加上"CoInitializeEx(nil, COINIT_MULTITHREADED);"和"CoUninitialize;"
    例如:
    procedure TActionThread.Execute;
    begin
        CoInitializeEx(nil, COINIT_MULTITHREADED);
        try
          while Not Terminated do begin
            //DoSomething
          end;
        finally
          CoUninitialize;
        end;
    end;
      

  7.   

    这个程序运行在服务器端(有自己的数据库),他会去检查每个客户端(也有自己的数据库,最多10几个吧),然后检查客户端中指定的某些表是否有新记录,然后插入服务器端数据库,然后整理服务器数据等等。
    sql好像没有连其他数据库的命令吧? 所以只能用程序做啦。
      

  8.   

    首先,这个逻辑本身就是错识的,如果客户端当中发生了变化,应该是它把变化的信息推到服务端,而不是服务端再去他指定的数据库进行检查.
    其次,MSSQLServer支持Linker Server.
      

  9.   

    Configuring Linked Servers