如果和可以执行cds.fieldbyname('field')。值?
有参考的速度更快吗?是"更清晰"?
DataSet.FieldByName('field').Value
是表演。每次执行此操作时,都会导致通过数据集的字段集合进行串行搜索,以找到带有所需名称的字段。该搜索不会以任何方式优化,例如使用二进制搜索或哈希算法。因此,如果有很多字段和/或您在迭代数据集中的记录时进行此访问,则可能会对性能产生重大影响。
这是使用对象检查器定义"持久" tfields的原因之一,但不是唯一的原因。您可以使用编译器已知的符号名称获得对特定TFIEL的引用,并且仅在编译时才发生一次。因此,是的,它比FieldByName
快。取决于您是否发现它更清晰。
使用持续性TFIELD的其他原因包括可以设置哪些计算字段的便捷性,更重要的是,在OnCalcFields
事件中,计算出的字段无需通过FieldByName
访问计算的字段。当然,使用FieldByName
与持久性字段的性能命中当然是乘以OnCalcField
事件中引用的字段数量,而OnCalcFields
在数据集中的每个记录中至少将一次调用一次,即使您不迭代数据集记录中的数据集记录自己的代码。
上面的所有TDATASET后代都是如此,而不仅仅是tclientdatasets。