多线程写同一张表,出现不却定的错误。
我40个线程同时运行。有些线程成功,有些失败!?
是否不可以这么做?

解决方案 »

  1.   

    可以~~~但要做线程同步!!TCriticalSection 类
      

  2.   

    最好不要这么做,速度反而会变慢。
    你可以试一下,对同一张表进行INSERT时单线程比多线程快。因为INSERT时会锁表,多线程反而会抢资源。INSERT多表时多线程就快了。呵呵
      

  3.   

    多线程写同一张表,这主要是根据设计要求来的,当然通常情况下是不建议如此操作,但是并不是所有的设计都可能地避免这个问题。比较建议的方式,在可能的情况下,数据库的写入操作,最好采用连接池的方式,针对连接启用事务锁机制。尽可能地避免多线程对同一张表进行写入操作,减少因数据同步而带来的不必要消耗。个人推荐对于数据的更新,最好采用存储过程,操作数据库如果比较频繁,则可以采用单独线程池进行数据库的操作,根据不冲突的情况下,计算出写入操作的并性处理能力,从而调配好线程池的线程数量,把这数据库操作部分从业务逻辑处理部分独立出来。对于多核心多CPU的广泛应用,多线程技术应该要求开发人员应用起来。
      

  4.   

    写的时候用adoCommand比较省资源
      

  5.   

    我需要从200个左右文件导入数据(同一张表)。所以设计时期望采用多线程读取解析数据,
    然后排队提交数据。没有采用TCriticalSection  类时,出错率20%左右,采用后出错率
    2%左右。因时间有限,后采用单线程处理问题。项目时间紧,没有及时看网上回复。
    谢谢各位老大关心。
    项目实践中,未采纳各位回复。(解决问题时,没有人恢复。)故,没有给分。
      

  6.   

    如果你是在同一个进程(程序)里实现的200个左右的导入数据,那用TCriticalSection应该出错率不会2%,我觉得你应该是用了多个进程来实现这200个文件导入数据的操作,如果在同一台电脑上的话,最好用Mutex,可以跨进程使用