FireDAC数据访问组件比DBExpress慢?

时间:2015-04-17 14:32:53

标签: sql-server delphi delphi-xe dbexpress firedac

我已将Delphi XE5应用程序中的数据库访问组件从DBExpress迁移到FireDAC。

所以在我使用TSQLConnection / TSQLDataSet的地方,我现在正在使用TFDConnection / TFDQuery。

到目前为止,我的观察结果是,从云端的SQL Server 2014数据库向客户端应用程序返回125 000行数据(通过简单的SELECT *查询),使用FireDAC组件和使用DBExpress需要大约两倍的时间组件。

当我在同一个桌面上运行相同的测试时,同一台机器上的应用程序和SQL服务器,FireDAC组件会稍微快一些。

这是正常的,还是我可能做错了什么?我对FireDAC组件不是很熟悉,所以任何指针都会非常有用。

DBExpress代码:

SQL_dataset:=TSQLDataSet;

....

SQL_dataset.CommandType:=ctQuery; 
SQL_dataset.CommandText:='SELECT * FROM TABLE';

SQL_dataset.Open;

If SQL_dataset.IsEmpty=False then 
begin 
  SQL_dataset.First;

  While not SQL_dataset.Eof do 
  begin
    { RETURN THE RECORDS }
    SQL_dataset.Next;  
  end;
end;

FireDAC代码:

SQL_query:=TFDQuery;

...

SQL_query.SQL.Text:='SELECT * FROM TABLE';
SQL_query.Open;

...然后根据DBExpress代码。

基于在线研究,我尝试了以下各种变体,但似乎没有什么区别:

SQL_query.ResourceOptions.ParamCreate  :=False;
SQL_query.ResourceOptions.ParamExpand  :=False;
SQL_query.ResourceOptions.MacroCreate  :=False;
SQL_query.ResourceOptions.EscapeExpand :=False;
SQL_query.ResourceOptions.DirectExecute:=True;
SQL_query.FetchOptions.CursorKind      :=ckDefault;
SQL_query.FetchOptions.Mode            :=fmOnDemand;
SQL_query.FetchOptions.RowsetSize      :=1000;
SQL_query.FetchOptions.Unidirectional  :=True;
SQL_query.FetchOptions.Items           :=
                                      SQL_query.FetchOptions.Items-[fiMeta];
SQL_query.UpdateOptions.ReadOnly       :=True;
SQL_query.DisableControls;

非常感谢任何建议或意见。

0 个答案:

没有答案