单元db.pas
包含TParam
类的实现,它表示数据库查询中的参数。
在测试包含大量参数的查询时,我注意到function TParam.ParamRef: TParam
需要花费大量时间,因为它会调用ParamByName
来执行无索引的params搜索。
实施很简单:
function TParam.ParamRef: TParam;
begin
if not Assigned(FParamRef) then
if Assigned(Collection) and (Name <> '') then
FParamRef := TParams(Collection).ParamByName(Name) else
FParamRef := Self;
Result := FParamRef;
end;
它可以返回self
或ParamRef
,因此我们的想法是允许某种重定向。
但它确实很慢ParamByName
,被称为很多,我不明白其目的。事实上,如果我将其修改为只返回self
,一切似乎都能正常工作。
我看到的唯一用途就是让几个同名的参数全部重定向到同一个实例。如果是这种情况,那么ParamByName
的性能损失肯定会超过此功能的好处。
ParamRef
未记录,private
因此仅在db.pas单元中相关。此外,网上没有重要的讨论。
有没有人遇到同样的问题?