【发布时间】:2018-11-27 20:23:26
【问题描述】:
使用 Delphi Berlin。
我在数据模块(“dmCore”)中有一个嵌套的 Clientdataset。
任何给定主项目的详细表中大约有 5000 条记录(使用 2 条主记录进行测试)。
我有一个“发布”按钮连接到 ActionManager 中的操作。
它的 OnUpdate 很简单:
actPost.Enabled:=dmCore.HasChanges;// checks master for changes
“HasChanges”很简单:
function TdmCore.HasChanges: boolean;
begin
result := False;
if cdsPSet.Active then
result:=(cdsPSet.ChangeCount>0);
end;
不幸的是,在操作的 onUpdate 中运行 CDS.ChangeCount 会占用大量 CPU 时间 (>50%)。
我没有注意到在非嵌套 CDS 上会发生这种情况...
是否有一种更简单(更快)的机制可以用来查看 CDS 是否已更改?我不需要计数,只需要某处发生变化的事实。
TIA 教育局
【问题讨论】:
-
目前尚不清楚我是否具备有效地做到这一点的技能——我的目标是“愚蠢的标志技巧”——在数据模块中设置一个布尔值“FastHasChanges”标志,并设置/清除可以更改数据的任何地方-然后只需检查标志。丑陋,丑陋-但很快就可以做到。感谢您的意见,如果我突然有更多空闲时间,我可能会试一试!
标签: delphi delphi-10.1-berlin tclientdataset