哪一个在Delphi COM对象的性能,早期绑定或后期绑定方面更好

jus*_*tyy 6 delphi com

在delphi中,如果要创建COM对象,可以通过两种方式完成,

第一个是早期绑定,例如,

uses
  MSScriptControl_TLB; // MS Script Control

var
  obj: IScriptControl;
begin
  obj := CreateOleObject('ScriptControl') as IScriptControl;
  .. 
  ..
  obj.ExecuteStatement('Msgbox 1') 
end;
Run Code Online (Sandbox Code Playgroud)

或者,你可以这样做(后期绑定)

var
  obj: OleVariant;

begin
  obj := CreateOleObject('ScriptControl') ;
  obj.ExecuteStatement('Msgbox 1');
end;
Run Code Online (Sandbox Code Playgroud)

哪一个在性能方面更好?

Dav*_*nan 11

哪一个在性能方面更好?

早期约束比后期快.后期绑定方法调度涉及以下内容:

  1. 从名称中查找入口点.
  2. 组装要传递给方法的参数,并执行任何必要的类型转换.
  3. 调用函数.
  4. 解组任何输出参数和返回值.

许多这些步骤根本不存在于早期绑定派遣中.

当然,如果函数完全执行任何重要操作,则在方法分派期间可能无法检测到性能不同.

  • 后期绑定方法调用不会将参数值压入堆栈.早期的约会电话.后期绑定参数存储在Variant数组中,然后将数组传递给该方法.调用者可以但不需要提前检索参数和类型,编译器可以从代码中静态地推断它们,但是如果检测到不匹配,被调用的方法将失败,并将报告实际的不匹配是什么. (2认同)