我读过一篇博客文章(目前找不到链接),作者说这是分配局部变量的速度比使用ADOQuery.FieldByName('...')。asString或TSQLQuery.FieldByName的速度更快('...')。asString,当解析具有数千条记录的整个查询时。我看不出两者之间的区别

var aLocalField: TField;
....
aLocalField := ADOQuery.FieldByName('...');
..
ShowMessage(aLocalField.asString)

并直接使用
ShowMessage(ADOQuery.FieldByName('...').asString);

博客文章中没有提及数据库类型或Delphi版本。此解决方案是否与一个或另一个相关(并且我不是在谈论晦涩/自定义的数据库系统)?

最佳答案

两者之间没有明显的性能差异。我希望您发现的是

DataSet.First;
while not DataSet.Eof do
begin
  ProcessValue(DataSet.FieldByName('Field').AsString);
  DataSet.Next;
end;

相对
Field := DataSet.FieldByName('Field');
DataSet.First;
while not DataSet.Eof do
begin
  ProcessValue(Field.AsString);
  DataSet.Next;
end;

如果是这样,则后者效率更高,因为FieldByName是一个(相对)缓慢的函数。如果您不需要多次调用它,请不要多次调用它。

关于Delphi-FieldByName.AsString-好的做法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9202964/

10-09 16:56