关于不使用BDE的构件效率问题.(100分)

C

cytown

Unregistered / Unconfirmed
GUEST, unregistred user!
发现一个严重的问题, 我用了ODBC98/ODBC EXPRESS做一个程序, 运行时
发现在做遍历查询时出现错误, TEMPDB容量不够! 我的TEMPDB是20M RAM,
而查询的仅是4~5K记录的3个库. 后来用PERFORMANCE MONITOR发现I/O
TRANSACTION/SEC到达100%, 约5-6秒后告诉我出错. 查询速度也是很慢.
我再用SQL TRACE查看, 发现他们用的查询都是用CURSOR, 进行遍历, 怪不
得@$%^$^$^%&^*. 后来, 我试了下BDE, 呵呵,不出错了, 最高才到70~80%,
而且速度快很多, 再看看TRACE, 发现没用CURSOR, 用标准SQL(SELECT ...)
返回结果很快.

以前我总认为BDE不好, 想不到在大密集查询时性能如此好.

是我配置错误还是确实ODBC构件有问题? 请各位告知.

附, 全部构件和BDE都是缺省配制, 环境: SQLSERVER 6.5SP5 + NTSP4
 
我也一直想找个代替bde的东西,现在发现还是离不开它。
 
BDE确实不错呀,
能对大多数数据库操作进行预先优化,再提交SQL SERVER。
不过在应用中能发布更方便一点,体积更小一点,与应用的接合更紧密一点就更好了。
 
我一直用ODBC Express,从来没有发现这种情况。4~5K数据根本毫不费力。
难道ODBC不是用“标准SQL”吗?
 
BDE还是不错的,何况我用的是Delhi
我从不用ODBC,速度不行
 
老兄用TABLE?QUERY应该不会吧。ODBC速度应该不比BDE慢
 
BDE是专为数据库/表而开发的,所以为了适应数据库的处理,Delphi对BDE中的
各项功能都做了优化。就譬如你自己编写的排序算法的效率就不如Dbase/Foxbase
等的一条命令一样。
 
我没有写QUERY吗? 呵呵,忘了, 绝对是用的QUERY, 而且是3个.
 
反正我觉得ODBC不会比BDE慢,因为BDE绕的弯应该比ODBC多,再说ODBC也是经过
优化的呀。
 
>反正我觉得ODBC不会比BDE慢
嘿嘿,最早期是实在没得用了才用ODBC,当然,那个年代过去了。
所谓面向对象的数据库链接是以牺牲部分性能来达到其与具体数据库无关的。
 
to amo: 你指的什么是“面向对象”的数据库连接?ODBC?BDE?
好象都不是啊?

ODBC的出现是为了给每中数据库一个统一的接口调用,
他的方法是最通用的,也是最标准的。
我认为ODBC失去的不是“性能”,而是“功能”,速度
应该没问题。
 
CAKK: 注意我说的是ODBC98/ODBC EXPRESS, 而不是ODBC. 我认为不是ODBC本身
的问题, 而是这2个构件的问题.
 
不好意思,一下子把Open想成Objective了!
Sorry!
 
试了 ODBC Express 5.1,的确如此,连接数据库开始,移动记录指针,
到修改数据、删除数据,全是该死的Cursor xxx,Cursor fetch xxx。
我只好 faint 了。现在我正担心我上一个项目会出什么问题,好在
访问量小的很。吓死我了,吓死我了...没解决之前,打死我也不用了
老老实实用 BDE,唉!BDE-ODBC-MSSQL也没问题,就是OE有。吓死我
了...
我要最后用绝招证实一下,再等等。
 
结果

OE allows one to use either the cursor model or the front-end cache model.
The BDE only uses the front-end cache model with a fast forward-only cursor
and therefore runs faster.

Cache your result set by setting cached to true.

Regards,
 
如果还不成,就没办法了,因为......
我保证,呵呵。给我分。
 
cj: 分只要解决问题保证有, 不过你的答案确实还有问题:-(
我试了一下, cache时遍历确实没有问题了, 但1个hebc同时不能有两个以上的
QUERY在运行:-( (有一个shmXX之类的错误) 你可以试试, cache=false就可以.
再试试解决.
 
呵呵,我现在彻底放弃ODBC 98/EXPRESS了。
现在D5的ADO很好。不过,你知道MSSQL7 的 SQL TRACE哪里去了吗?
我好帮你解决问题呀。我好不容易找到了台6.5,也被我UPDATE了。

这个问题满难解决的呀,唉,再试试。你不会每个QUERY自己连呀:)
再试试,才100:(((
 
呵呵, sql7我的机器破, 怕装完速度慢, 还是在用sql6.5, 不过, 你应该可以在
enterprise manager中找到.
每个query自己连, 亏你想的出来:-%lt;
加分? 我再加50~100, 看你解决的如何了:)
 
没空试,把你的详细设置和详细错误信息给我,如果是ODBC EXPRESS的,寄个例子
给我。
 
顶部