我已将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;
非常感谢任何建议或意见。