我读过一篇博客文章(目前找不到链接),作者说这是分配局部变量的速度比使用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/