我有问题在Delphi TClientDataSet中检索数据。
用ADO的代码:
上面的代码使用纯ADO时,在3-6秒内返回超过180k行。
同样的代码使用TClientDataSet:
以下代码返回相同数量的行(超过180k),但仅需3-4分钟。
CDS有什么问题吗? 它比使用ADO慢大约100倍。是否可能修复它?
用ADO的代码:
ADOQuery1.SQL.Text:='SELECT * FROM Table1 WITH (NoLock)';
DataSource1.DataSet:=ADOQuery1;
DataSource1.DataSet.Open;
DataSource1.DataSet.Last;
上面的代码使用纯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;
以下代码返回相同数量的行(超过180k),但仅需3-4分钟。
CDS有什么问题吗? 它比使用ADO慢大约100倍。是否可能修复它?
TClientDataSet
可能不是您要求的最佳工具。) - DisillusionedTDataSet
的派生类通常很慢。为了提取数据,请优化查询以使用前向、只读游标并访问底层的Recordset
接口。@mjn,它的文档描述不足,例如使用TList
合适的项目数量也没有文档说明。 - TLama