Delphi TTable和lookup字段性能问题

Delphi TTable和lookup字段性能问题,delphi,unidac,Delphi,Unidac,我有一个TTable(实际上是一个UniDac表),其中包含表字段和来自另一个表(Mysql)的2个查找字段。 我已经设置了正确的索引,表加载速度非常快。问题是当我手动编辑一个字段时,如 Table1.FieldByName('discount_value').AsInteger := 10; 每次执行此命令时,即使没有Post()也会非常慢。 如果我删除2个查找字段,一切都很好-它的速度非常快 看起来,即使在执行Post()之前,每次编辑记录时都会加载查找字段 是否有任何方法可以防止这种情况

我有一个TTable(实际上是一个UniDac表),其中包含表字段和来自另一个表(Mysql)的2个查找字段。 我已经设置了正确的索引,表加载速度非常快。问题是当我手动编辑一个字段时,如

Table1.FieldByName('discount_value').AsInteger := 10;
每次执行此命令时,即使没有Post()也会非常慢。 如果我删除2个查找字段,一切都很好-它的速度非常快

看起来,即使在执行Post()之前,每次编辑记录时都会加载查找字段


是否有任何方法可以防止这种情况发生,或者以某种方式检索查找字段,然后在不反复加载的情况下进行缓存?

从Embarcadero WiKi中,必须将
自动计算字段设置为
False
,以便仅在打开记录时进行计算

AutoCalcFields为False时,将重新计算查找字段并 OnCalcFields事件仅在以下情况下发生:
*数据集已打开。
*数据集已进入dsEdit状态。
*从数据库检索记录。


您可以尝试使用该属性,该属性控制是否缓存查找字段的值

确定每次数据集中的当前记录更改时是缓存还是动态查找查找字段的值

将LookupCache设置为true,以在LookUpdateSet不太可能更改且不同查找值的数目较小时缓存查找字段的值。缓存查找值可以加快性能,因为在打开数据集时会预加载每组LookupKeyFields值的查找值。当数据集中的当前记录发生更改时,field对象可以在缓存中定位其值,而不是访问LookUpdateSet。如果LookUpdateSet位于访问速度较慢的网络上,则这种性能改进尤其显著


上面链接的文档中提供了更多信息,包括一些性能注意事项和在运行时手动刷新LookupList的信息。

我尝试了LookupCache,效果非常好。即使AutoCalcFields设置为true,它的加载速度也非常快。我在TUniTable中寻找类似LookupCache的属性,而不是在TField上。谢谢:)