TClientDataSet使用100K +行非常慢

Val*_*riy 5 delphi performance tclientdataset

我有问题使用Delphi TClientDataSet检索数据

代码与ADO:

ADOQuery1.SQL.Text:='SELECT * FROM Table1 WITH (NoLock)';
DataSource1.DataSet:=ADOQuery1;
DataSource1.DataSet.Open;
DataSource1.DataSet.Last;
Run Code Online (Sandbox Code Playgroud)

使用纯ADO时,上面的代码在3-6秒内返回超过180k行.

与TClientDataSet相同的代码:

ADOQuery1.SQL.Text:='SELECT * FROM Table1 WITH (NoLock)';
CDS1.SetProvider(ADOQuery1);
DataSource1.DataSet:=CDS1;
DataSource1.DataSet.Open;
DataSource1.DataSet.Last;
Run Code Online (Sandbox Code Playgroud)

以下代码返回相同数量的行(超过180k),但在3-4分钟内.

CDS有什么问题?它比使用ADO慢大约100倍.有可能解决它吗?

小智 -1

在加载数据之前尝试将 CDS1.LogChanges 属性设置为 False。这需要在代码中完成,因为它不是已发布的属性。

来自帮助文件:对于大型数据集,LogChanges 的值为 True 可能会严重影响应用程序的性能。

您可以在初始加载后将其打开。