接口对Delphi的执行速度有什么影响?

mjn*_*mjn 9 delphi oop performance interface

如果我用我的Delphi程序中的所有对象引用替换接口引用,并使用从TInterfacedObject继承的对象,生成的应用程序将以与以前相同的速度运行吗?或者引用计数是否在运行时添加了重要的执行开销?

Eri*_*nge 8

如果对这些接口进行大量赋值(或在函数调用中将它们作为非const,非var参数传递),引用计数可能会影响您.

然而真正的麻烦往往不是引用计数本身,而是隐式的try-finally结构编译器添加以保护引用计数,这将增加你的调用开销,如果你有许多简单的方法可能是最痛苦的( vs一个包含你所有代码的大程序,你并不是真的想要的.

为了缓解这个方面,总是将接口作为const或var参数传递,避免将接口作为函数调用结果返回,并最小化接口类型的局部变量的使用,更喜欢const参数和直接对象字段用法.

  • 是的,它可以,特别是在简单的过程中,因为try-finally代表相当多的代码(在asm级别),并且它还阻止编译器生成最有效的进入和退出代码.例如,检查一下,这是一个隐式的try-finally保护代码甚至不执行的情况,因为隐式try-finally被附加到编译器到它们所处的过程,而不是可能失败的代码.因此,即使您没有执行可能失败的代码,也要在过程调用中为它付费.http://delphitools.info/2009/05/06/code-optimization-go-for-the-jugular/ (3认同)

Mar*_*ema 6

接口类确实带来了增加和释放您创建,传递和销毁的每个实例的引用计数的开销,但除非您在紧密循环中创建,销毁和传递引用,否则您不应该遇到任何明显的减速.

您当然可以通过在_AddRef和_Release覆盖中返回-1来禁用引用计数,但这并不妨碍编译器生成这些调用...