由于某种原因,我长期使用sybase数据库进行CS开发。
以前,一直使用odbc数据源,然后使用ADOConnection进行连接,后来,发现sybase提供了专门的oledb驱动,就直接使用sybase oledb provider 8.0进行连接。
现在开始测试,从服务器取回30个字段(无blob和text字段)的3000条记录,用adoquery显示在dbgrideh中。显示前adoquery.DisableControls,之后EnableControls
通过比对,结果还是没有想像的好:
1、将adoquery的cachesize设置为500,光标位置cursorlocation设为客户端光标clUseClientcl,其它为默认设置:[/b] odbc取回全部数据,时间为23秒,oledb为18秒;
2、将adoquery的cachesize设置为1,cursorlocation设为UseServer,其它为默认设置:
odbc取回全部数据,时间为6秒,oledb为2秒。
odbc比较古老,是采用c编写的一组通用数据库调用API函数,oledb是更先进的技术,采用com技术,按微软的说法,比odbc更快,更高效。
问题是,现在大家都普遍使用delphi的ado组件,这个是对微软ado技术的再次封装。在dlphi中当使用odbc,是使用了ado组件加odbc技术,而当使用oledb,则是使用了比较纯粹的oledb技术。
从实际测试看,在delphi通过ado组件来使用odbc和oledb,性能差别不大,虽然将客户端光标改为服务器光标,oledb性能提升比odbc要明显,但这种方式会损失客户端光标的一些方便性能,如统计记录数、排序等,而且ehlib的滚动条将失去作用。
我只对sybase数据库进行了测试,估计其它系统也差不多吧。
------解决思路----------------------
使用 ODBC 多了一个动作,就是去配置 ODBC ,虽然很简单,这个东西出现的太早了,当时也没有别的方式,有了 OLEDB 就方便多了,尤其是在 CS 应用中,至于速度问题,当时有了ODBC ,就相当牛 X 了,现在选择更多了。