TIBQuery,TIBCustomDataSet系列的BUG?//INTERBASE高手请进!!(200分)

  • 主题发起人 主题发起人 onedot
  • 开始时间 开始时间
O

onedot

Unregistered / Unconfirmed
GUEST, unregistred user!
我经过测试,
使用BDE和TIB系列控件连接INTERBASE数据库
如果执行同一个查询语句,如果查询的字段越多,如select * from Table1 where id=0001
其中Table1有大约100个字段(没办法,因为是固定的财务要求)
这时使用BDE连接的TQuery.open大约只耗费0.3秒
而使用TIBQuery.open耗费则差不多是3-4秒!!!!!!!
而且有个有趣问题,如果SQL语句改成select f1,f2,f3,f4 from Table1 where id=0001
则两种执行效率相差不多,一个为0.3,一个为0.4,但还是BDE快!!
我跟踪后,发现TIBQuery无论如何都会在执行前调用它内部的prepare方法。而这个方法则
就是耗费的瓶颈所在。
不知哪位以前也发现过此问题,后又如何解决??//本人准备将其代码重写
 
我找到问题了
 
请onedot 为兄弟详细讲解一下INTERBASE的内容!
 
其实仔细研究源码,你可以发现更深层次原因在于它们的父类的一个方法实现的策略不同!
TIBQuery->TIBCustomDataSet
TQuery->TDBDataSet->TBDEDataSet
其实TIBCustomDataSet和TBDEDataSet都有InternalInitFieldDefs方法。
经过测试,同一个长SQL,前者执行InternalInitFieldDefs时间大约需要2-3秒
后者仅仅0.2秒不到!!!其实这个时间就是我前面说的时间的主要耗时处!
你可以发现前者的该方法里居然已经开始查询数据库的系统表了!!而后者的只是调用BDE的
一些内部函数进行FIELDDEF的初始化!

 
恩,有道理
 
你来拿分?给你了,呵呵
 
后退
顶部