【发布时间】:2011-08-13 15:05:32
【问题描述】:
性能可以忽略不计吗?
例如,
myQuery.FieldbyName("MyField").AsString;
myQuery.Fields[0].AsString;
案例: 包含大量字段的表格,例如 > 50 个字段
访问大型结果集,例如 > 100,000 行
字段名称的可读性优势是否值得降低性能?
【问题讨论】:
标签: performance delphi dataset
性能可以忽略不计吗?
例如,
myQuery.FieldbyName("MyField").AsString;
myQuery.Fields[0].AsString;
案例: 包含大量字段的表格,例如 > 50 个字段
访问大型结果集,例如 > 100,000 行
字段名称的可读性优势是否值得降低性能?
【问题讨论】:
标签: performance delphi dataset
这是 François Gaillard 关于FieldByName performance issues 的有趣帖子。
【讨论】:
性能可能不会可以忽略不计,具体取决于您按名称访问字段的频率。如果您将它用于每个字段和每一行,您可能会注意到性能下降(例如参见http://www.delphifeeds.com/go/s/74559)。为了保持可读性并提高性能,您可以:
此外,AsXXXXXX 调用可能比使用 TField 后代原生 Value 属性慢。
【讨论】:
.Value 比.As[Type] 快吗? IIRC,.Value 是变体类型属性,而 .As[Type] 是更有效的类型特定属性。 .Value更方便。
我发现 FieldByName 明显变慢了。
我通常通过中间层访问数据库,该中间层多次从同一个表中访问整个记录。在创建该层时,我将每个字段的索引分配给一个变量。然后我使用这些变量供以后访问,以保持代码可读。
ADODataSet.CommandText := 'select * from [TABLE] where 1 = 0'; //table layout
ADODataSet.Open;
ADODataSet.GetFieldNames(List);
varMyField := List.IndexOf('MyField');
【讨论】: