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