在一些代码,我维护,我看到TClientDataSet.OnCalcFields
事件处理程序使用两种不同的方法:编译器是否优化(关闭)相同的FieldByName调用?
with DataSet do
begin
// 1. Call FieldByName twice
if AMinDate > FieldByName(SPlanAllocatieFromDate).AsDateTime then
AMinDate := FieldByName(sPlanAllocatieFromDate).AsDateTime;
// 2. Put the retrieved FieldByName value in a temp var
lEmpID := FieldByName(SPlanAllocatieEmpID).AsInteger;
if lEmpID <> 0 then lTSAllocatedEmpIDs.Add(IntToStr(lEmpID));
end;
将编译器(德尔福XE2的Win32应用程序)优化方法2使用一个临时变种?两个FieldByNames非常接近,你甚至可以说嵌套。
如果不是,我应该重写1.因为OnCalcFields经常执行。
顺便说一句。我知道Fields []与FieldByName()的比较,或者在运行EOF循环时使用temp TField var,这些都不是问题。
我个人不会认为编译器优化是好的。我通常会在谨慎的方面犯错,并且指定一个临时变量并消除所有疑问。 –
@Johan,看到注释*“BTW。我知道Fields []与FieldByName()...”*在问题中;-) – TLama
据我所知,只有'gcc'足够聪明才能做到这一点。 –