有点长,还请大神们看完,感谢。用的是SQL Server,最近遇到一个问题,一个Instance下面可能有几十个数据库,每个数据库的表当然是一样的。现在要从每个数据库的某一个表里面拿数据,这个表里面只有一条数据(有主键)。正常情况下,访问这个表然后查询出这条数据要花0.6秒左右,当然是第一次。第二次访问的时候只有0.0几秒,可以忽略不计。问题来了,假如有十个数据库,第一次的时候就要花六七秒,老大说这太慢了,最多三秒搞定。
然后我就尝试着用多条线,15个数据库分三条线,每条线负责拿五个数据库的数据。奇迹出现了,每次访问一个数据库的时间竟然到达了3.5S甚至更多。就算三条线同时执行,也要超过15S的时间!
坑爹啊,不知道是什么原因。是这样设计的。打开Form的时候为了不阻塞UI,访问数据库的时候是另外开的线程,然后我在访问数据的那个线程里面开了三条线去访问15个数据库。
由于取数据是另外的线程,所以Form很早就打开了,必须要等取数据的线程执行完才能进行下一步的操作,所以我用的是Join,不知道还有什么更好的方法。我试过,如果我用循环来判断,如果没有执行完Sleep多少时间,这样在界面上点鼠标的时候程序会没响应。但是用Join就算你在那段时间狂点也不会没响应。
Join的时候我也是:
Thread1.Start()
Thread2.Start()
Thread3.Start()
然后
Thread1.Join()
Thread2.Join()
Thread3.Join()
不知道为什么啊,请大家帮忙想想办法啊。数据库多线程join
然后我就尝试着用多条线,15个数据库分三条线,每条线负责拿五个数据库的数据。奇迹出现了,每次访问一个数据库的时间竟然到达了3.5S甚至更多。就算三条线同时执行,也要超过15S的时间!
坑爹啊,不知道是什么原因。是这样设计的。打开Form的时候为了不阻塞UI,访问数据库的时候是另外开的线程,然后我在访问数据的那个线程里面开了三条线去访问15个数据库。
由于取数据是另外的线程,所以Form很早就打开了,必须要等取数据的线程执行完才能进行下一步的操作,所以我用的是Join,不知道还有什么更好的方法。我试过,如果我用循环来判断,如果没有执行完Sleep多少时间,这样在界面上点鼠标的时候程序会没响应。但是用Join就算你在那段时间狂点也不会没响应。
Join的时候我也是:
Thread1.Start()
Thread2.Start()
Thread3.Start()
然后
Thread1.Join()
Thread2.Join()
Thread3.Join()
不知道为什么啊,请大家帮忙想想办法啊。数据库多线程join
解决方案 »
- 关于NEW 关键字的疑惑,在线等~
- 大侠,求助!
- 未将对象引用设置到对象的实例,如何解决?
- winform启动时怎样先显示窗体,然后再加载窗体中表格的内容?
- 如何把dataset数据集中的某几列数据集体添加到其他的表中?添加时还要进行判断,如果重复则不添加。急!
- 在 c#下能禁止网络连接么 ?
- 请问怎样截获窗口右上角关闭按钮的动作,让窗口不要关闭?
- 载InstallShield 10中,怎样能够对 oracle 10进行打包???
- 如何获取c#预定义的所有特性(Attribute)
- 对SQL语句的操作
- C#通讯如何提取帧内容
- c/s程序在服务器上跑几天就出错,用 Trace 记录到了,却也无法诊断异常,请高手给个思路!
猜想是你使用线程的方式不对