如果我有一个使用CLR兼容代码(例如,在C#中)编写的库,并且我使用DLR (即,在IronPython中)子类化了其中的一些类,与仅使用CLR兼容代码进行子类化相比,这是否会对我的CLR库的速度(例如,强制转换等)产生影响?
我希望答案是‘否’,只要DLR不覆盖我的CLR库所需的任何代码。我可以写一些代码来对答案进行经验基准测试,但我想知道你们中是否有人知道。
非常感谢你,祝你新年快乐!
约翰
发布于 2011-01-05 10:55:54
在你的库代码中根本没有额外的开销。引入新的子类根本不会改变CLR的行为。您可以想象这样一个版本的CLR,它执行类层次结构分析或运行时优化,其中内联方法或优化类型转换,其中附加子类的存在可能会默认这些优化。但我不知道有什么CLR实现做了这些优化(当然MS CLR没有)。
但是使用Python子类可能会稍微慢一点。这是因为Python子类将覆盖所有虚拟成员-然后需要将这些覆盖分派给实现重载的Python函数或基类。因此,无论何时使用Python中的子类化对象,调用虚方法都会稍微慢一点。额外的开销将包括对Python类型对象的一个或多个字典查找,以查看该方法是否在那里实现。
https://stackoverflow.com/questions/4586657
复制相似问题