有人可以解释任何CLR / DLR子类开销吗?

时间:2011-01-03 17:22:51

标签: clr dynamic-language-runtime subclassing

如果我有一个使用CLR兼容代码(即在C#中)编写的库,并且我使用DLR(即在IronPython中)对其中一些类进行子类化,这对我的CLR库的速度(即转换等)有任何影响与只使用CLR兼容代码进行子类化的情况相比?

只要DLR不覆盖我的CLR库所需的任何代码,我希望答案是“不”。我可以写一些代码来经验性地对答案进行基准测试,但是想知道你是否有人知道。

非常感谢你,新年快乐!

约翰

1 个答案:

答案 0 :(得分:1)

根本没有在库代码中添加任何开销。引入新的子类根本不会改变CLR的行为。您可以想象一个版本的CLR执行类层次结构分析或运行时优化,这些内联方法或优化远程转换,其中存在其他子类可以默认这些优化。但我不知道有哪些CLR实现进行那些优化(当然MS CLR没有)。

但是使用Python子类可能会慢一些。那是因为Python子类将覆盖所有虚拟成员 - 那些覆盖将需要分派到实现重载或基类的Python函数。因此,无论何时使用Python中的子对象,在调用虚方法时都会慢一些。额外的开销将包含一个或多个字典查找到Python类型对象,以查看该方法是否在那里实现。