性能是否可以忽略不计?
例如,
myQuery.FieldbyName("MyField").AsString;
myQuery.Fields[0].AsString;
例: 具有相当数量字段的表,例如> 50个字段
访问大型结果集,例如> 100,000行
字段名称的可读性好处是否值得降低性能?
答案 0 :(得分:6)
以下是FrançoisGaillard关于FieldByName performance issues的一篇有趣的文章。
答案 1 :(得分:4)
效果可能不会可以忽略不计,具体取决于您按名称访问字段的频率。如果您将它用于每个字段和每一行,您可能会注意到性能下降(例如,参见http://www.delphifeeds.com/go/s/74559)。为了保持可读性而又提高性能,你可以:
AsXXXXX调用也可能比使用TField后代本机Value属性慢。
答案 2 :(得分:1)
我发现FieldByName要慢得多。
我通常通过中间层访问数据库,该中间层可以从同一个表中多次访问整个记录。在创建该层时,我将每个字段的索引分配给变量。然后我使用这些变量进行后续访问,仍然具有可读代码。
ADODataSet.CommandText := 'select * from [TABLE] where 1 = 0'; //table layout
ADODataSet.Open;
ADODataSet.GetFieldNames(List);
varMyField := List.IndexOf('MyField');