【问题标题】:which one is better in terms of performance, the early binding or late binding in Delphi COM objectsDelphi COM对象中的早期绑定和后期绑定哪个性能更好
【发布时间】:2013-06-29 18:15:49
【问题描述】:

在delphi中,如果要创建COM对象,有两种方法,

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

uses
  MSScriptControl_TLB; // MS Script Control

var
  obj: IScriptControl;
begin
  obj := CreateOleObject('ScriptControl') as IScriptControl;
  .. 
  ..
  obj.ExecuteStatement('Msgbox 1') 
end;

或者,您可以按照以下方式进行(后期绑定)

var
  obj: OleVariant;

begin
  obj := CreateOleObject('ScriptControl') ;
  obj.ExecuteStatement('Msgbox 1');
end;

哪一个在性能方面更好?

【问题讨论】:

  • 早期或晚期绑定不会改变是否需要提升。无法回答“哪个更好”。有时早期绑定更好,有时后期绑定更好。
  • 奇怪,但事实是我从第二种方法更改为第一种方法,错误消失了。
  • 这一切都在win7上运行。无论如何,我的主要问题是哪一个在性能方面更好

标签: delphi com


【解决方案1】:

在性能方面哪个更好?

早绑定比晚绑定快。后期绑定方法分派涉及以下内容:

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

这些步骤中的许多根本不存在于早期绑定调度中。

当然,如果函数做了任何重要的事情,那么在方法分派期间的性能差异很可能无法检测到。

【讨论】:

  • 如果您可以简单地编辑问题以询问“哪一个在性能方面更好?”会更好。就目前而言,最初提出的问题并不适合 SO。但是我回答的问题很好。
  • @DavidHeffernan - 不确定您是否对 C++Builder 足够熟悉以回答我的这个相关问题,该问题仍在等待一个好的答案......? stackoverflow.com/questions/11670175/…
  • @Roddy 对不起,我不使用 C++Builder
  • 后期绑定的方法调用不会将参数值压入堆栈。早期绑定电话可以。后期绑定参数存储在 Variant 数组中,然后将该数组传递给方法。调用者可以但不需要提前检索参数和类型,编译器可以从代码中静态推断它们,但是如果检测到不匹配,被调用的方法将失败,并将报告实际的不匹配是什么.
猜你喜欢
  • 2016-12-15
  • 1970-01-01
  • 2010-10-21
  • 2015-06-27
  • 1970-01-01
  • 2010-10-03
  • 2012-07-25
  • 2023-03-29
  • 1970-01-01
相关资源
最近更新 更多