将字段添加到客户端DataSet或动态访问它



如果和可以执行cds.fieldbyname('field')。值?

有参考的速度更快吗?是"更清晰"?

的问题
DataSet.FieldByName('field').Value

是表演。每次执行此操作时,都会导致通过数据集的字段集合进行串行搜索,以找到带有所需名称的字段。该搜索不会以任何方式优化,例如使用二进制搜索或哈希算法。因此,如果有很多字段和/或您在迭代数据集中的记录时进行此访问,则可能会对性能产生重大影响。

这是使用对象检查器定义"持久" tfields的原因之一,但不是唯一的原因。您可以使用编译器已知的符号名称获得对特定TFIEL的引用,并且仅在编译时才发生一次。因此,是的,它比FieldByName快。取决于您是否发现它更清晰。

使用持续性TFIELD的其他原因包括可以设置哪些计算字段的便捷性,更重要的是,在OnCalcFields事件中,计算出的字段无需通过FieldByName访问计算的字段。当然,使用FieldByName与持久性字段的性能命中当然是乘以OnCalcField事件中引用的字段数量,而OnCalcFields在数据集中的每个记录中至少将一次调用一次,即使您不迭代数据集记录中的数据集记录自己的代码。

上面的所有TDATASET后代都是如此,而不仅仅是tclientdatasets。

最新更新