向TClientDataset添加字段的重点是Cds.FieldByName(' field')。值?
获得参考是否更快? 是否更清楚?
答案 0 :(得分:9)
的问题
DataSet.FieldByName('field').Value
是表演者。每次执行此操作时,都会导致对数据集的字段集合进行串行搜索,以找到具有所需名称的字段集合。此搜索未以任何方式进行优化,例如使用二进制搜索或散列算法。因此,如果有多个字段和/或您在迭代数据集中的记录时进行此访问,则会对性能产生重大影响。
定义"持久性"的一个原因,但不是唯一的原因。 TField使用Object Inspector。您可以使用编译器已知的符号名称来获取对特定TField的引用,这只在编译时发生一次。所以是的,它比FieldByName
快。由你决定是否更清楚。
使用持久性TField的其他原因包括可以设置计算字段的容易程度,更重要的是,不需要通过{FieldByName
中OnCalcFields
访问计算字段的事实。 1}}事件。当然,使用FieldByName
与持久字段的性能匹配乘以OnCalcField
事件中引用的字段数,并且OnCalcFields
对数据集中的每条记录至少调用一次即使您没有在自己的代码中迭代数据集记录。
以上所有TDataSet后代都是如此,而不仅仅是TClientDataSets。