.................................. (1分)

.......................
 
bluely,能帮忙看看copypaste的代码就好了
copypaste的代码也发给我了,我也遇到他说的问题
正在改他的代码,还没改好
 
delphiroad:偶水平臭,偶的源码你看不上,5555555555555
 
对了,bluely,说句题外话,非得每个线程建立一个ado连接吗?是不是有点浪费?
 
barton:
如果不这样,你根本就不能用ADO查什么数据
 
.................................
 
因为线程里调用ADO的话,必须在线程开始的时候初始化COM,建立独自的ADO连接,否则不能操作ADO数据库的
 
我认为建立线程内的ado连接最大的问题在于事务的隔离。有时候线程A对数据库进行操作
后,线程B应该知道,但因为每个用户用的是各自独立的数据库连接所以无法立即知道。
我最先是这样考虑的:将所有涉及数据库操作的业务请求通过消息排队。这样也不会发生
阻塞,只不过对客户的回应会慢一点,因为需要根据数据库操作后的结果来给客户返回数
据。
后来发现这样也不是很合适。然后就改成单一客户阻塞,就是说每个在线的客户拥有一个
临界锁,这样发生阻塞的机会小得多,对用户的响应会快很多。换句话说,每个客户同时
只能有一个业务请求。不过这样有可能发生短暂的阻塞。
再后来发现这样用的临界锁太多了。改成另外一种方式:即业务锁。同时,一种业务同时
只能有一个用户来操作,如果有其它用户有相同的业务请求必须排队。呵呵,这样也会发
生阻塞,但是CPU却并不会怠工。只有在每种业务的发生率严重不平衡的时候而且CPU数量
很多的情况下会发生资源浪费的现象。
 
..........................
 
应该不是内存的事,我想应该是在Disconnect时发生冲突吧,现在还没找到具体代码,也懒了。我使用的缓存,一开始就分配内存,然后需要时再分配它,用完就回收,等待下次使用.我不太习惯一次用完就Free.
程序在测试时,我用递增的方式来增加线程,发现一增加到100个线程连接时就出现CPU/Memory的线性增加,然后Disconnect的话,hoho,死翘翘.

代码可以在这里DOWN:
http://www.eping.net/fourm/dispbbs.asp?boardID=15&ID=650
 
张无忌你年轻人好狂妄,你根本完全没有明白我的意思就在这儿乱说。
在主线程中初始化连接而后在线程中调用查询有什么不可?

to bluely:
SQL Server对每个连接建立一个线程,而且每个线程都是通过事务隔离。客户A上线的时候
通过线程A的连接设置了某个关键值,而接下来需要检查这个关键值的时候可能就是线程B
的连接了。线程B返回中的值你如何能够保证与线程A设置的值相同?
 
ADO的在线程使用上,如果不涉及事务的话,可以不使用Connection对象,只要将DataSet.ConnectionString有值就行了,然后...该做什么就做什么了.
 
barton:
你可以测试测试就知道了,呵呵,除非你是在线程的保护方式里ADO查询,否则就要出错.
 
张无忌:我测试的时候你还在上学呢。我根本不用ADO控件,因为我从不使用Dataset的。
 
我在写这个测试的时候用的是COM接口,根本就没有使用过什么控件.
 
To barton:<<我根本不用ADO控件,因为我从不使用Dataset的。

奇怪,不用ADO控件,不用Dataset,你怎么能下此结论??
 
.....................
 
to bluely:我下什么结论了?你用ado控件最后也得调用com不是?
 
.....................
 
顶部