请注意下面的编辑以获取更多信息,以及可能的解决方案
我们最近修改了一个大型Delphi应用程序,以使用ADO连接和查询而不是BDE连接和查询.自那次改变以来,表现变得非常糟糕.
我已经分析了应用程序,瓶颈似乎是在实际调用TADOQuery.Open.换句话说,除了重构应用程序以减少实际使用数据库之外,从代码角度来看,我无法做很多事情来改进这一点.
有没有人有关于如何提高ADO连接的Delphi应用程序性能的建议?我已经尝试了这里给出的两个建议,几乎没有任何影响.
为了了解性能差异,我对相同的大型操作进行了基准测试:
在BDE下:11秒
在ADO下:73秒
在该文章引用的更改之后的ADO下:72秒
我们在客户端 - 服务器环境中使用Oracle后端.本地计算机每个都保持与数据库的单独连接.
对于记录,连接字符串如下所示:
const
c_ADOConnString = 'Provider=OraOLEDB.Oracle.1;Persist Security Info=True;' +
'Extended Properties="plsqlrset=1";' +
'Data Source=DATABASE.DOMAIN.COM;OPTION=35;' +
'User ID=******;Password=*******';
Run Code Online (Sandbox Code Playgroud)
回答zendar提出的问题:
我在Windows Vista和XP上使用Delphi 2007.
后端是Oracle 10g数据库.
如连接字符串所示,我们使用的是OraOLEDB驱动程序.
我的基准测试机器上的MDAC版本是6.0.
编辑:
在BDE下,我们有很多代码如下:
procedure MyBDEProc;
var
qry: TQuery;
begin
//fast under BDE, but slow under ADO!!
qry := TQuery.Create(Self);
try
with qry do begin
Database := g_Database;
Sql.Clear;
Sql.Add('SELECT');
Sql.Add(' FIELD1');
Sql.Add(' ,FIELD2');
Sql.Add(' ,FIELD3');
Sql.Add('FROM');
Sql.Add(' TABLE1');
Sql.Add('WHERE SOME_FIELD …Run Code Online (Sandbox Code Playgroud)