有点长,还请大神们看完,感谢。用的是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