使用字段名称而不是索引访问数据集字段的性能

发布于 2024-11-03 20:39:00 字数 226 浏览 1 评论 0原文

性能可以忽略不计吗?

例如,

myQuery.FieldbyName("MyField").AsString;
myQuery.Fields[0].AsString;

案例: 具有相当数量字段的表,例如 > 50 个字段

访问大型结果集,例如 > 100,000 行 字段

名称的可读性优势是否值得降低性能?

Is the performance negligible?

For example,

myQuery.FieldbyName("MyField").AsString;
myQuery.Fields[0].AsString;

Cases:
Table with a decent number of fields, say > 50 fields

Accessing large resultsets, say > 100,000 rows

Is the readability benefit of field names worth the performance decrease?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

柒七 2024-11-10 20:39:00

这是 François Gaillard 撰写的关于 FieldByName 性能问题的有趣帖子

Here is an interesting post by François Gaillard about FieldByName performance issues.

冰雪之触 2024-11-10 20:39:00

性能可能不会可以忽略不计,具体取决于您按名称访问该字段的频率。如果您对每个字段和每一行都使用它,您可能会注意到性能下降(例如,请参见 http:// /www.delphifeeds.com/go/s/74559)。为了保持可读性并提高性能,您可以:

  1. 仅使用 ['FieldName'] 或 FieldByName() 语法一次,并将对该字段的引用存储在变量中。
  2. 使用 "static" 持久字段声明,右键单击数据集,选择字段编辑器并添加所需字段。它将声明正确的 TField 后代,并让您指定一个名称。

此外,AsXXXXX 调用可能比使用 TField 后代本机 Value 属性慢。

The performance may not be negligible, depending on how often you access the field by name. If you use it for every field and every row you may notice a performance decrease (see for example http://www.delphifeeds.com/go/s/74559). To mantain readability yet improve performance you could:

  1. Use the ['FieldName'] or FieldByName() syntax only once, and store a reference to the field in a variable.
  2. Use "static" persistent field declaration, right-clicking the dataset, select Field Editor and adding needed fields. It will declare the proper TField descendant, and let you assign a name.

Also the AsXXXXX calls may be slower than using a TField descendant native Value property.

若言繁花未落 2024-11-10 20:39:00

我发现 FieldByName 明显变慢。

我通常通过中间层访问数据库,该中间层多次访问同一个表中的整个记录​​。创建该层时,我将每个字段的索引分配给一个变量。然后,我使用这些变量供以后访问,以便仍然具有可读的代码。

ADODataSet.CommandText := 'select * from [TABLE] where 1 = 0'; //table layout
ADODataSet.Open;
ADODataSet.GetFieldNames(List);
varMyField := List.IndexOf('MyField');

I have found FieldByName to be noticeable slower.

I normally access the database through an intermediate layer, that access entire records from the same table alot of times. On creation of that layer I assign the index of each field to an variable. I then use the variables for later access, to still have readable code.

ADODataSet.CommandText := 'select * from [TABLE] where 1 = 0'; //table layout
ADODataSet.Open;
ADODataSet.GetFieldNames(List);
varMyField := List.IndexOf('MyField');
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文