如果我有一个使用符合 CLR 的代码(即在 C# 中)编写的库,并且我使用 DLR(即在 IronPython 中)对其中一些类进行子类化,与 if 相比,这对我的 CLR 库(即强制转换等)的速度有什么影响它仅使用符合 CLR 的代码进行子类化?
只要 DLR 不覆盖我的 CLR 库所需的任何代码,我希望答案是否定的。我可以编写一些代码来凭经验对答案进行基准测试,但想知道你们中是否有人知道。
非常感谢您,新年快乐!
约翰
如果我有一个使用符合 CLR 的代码(即在 C# 中)编写的库,并且我使用 DLR(即在 IronPython 中)对其中一些类进行子类化,与 if 相比,这对我的 CLR 库(即强制转换等)的速度有什么影响它仅使用符合 CLR 的代码进行子类化?
只要 DLR 不覆盖我的 CLR 库所需的任何代码,我希望答案是否定的。我可以编写一些代码来凭经验对答案进行基准测试,但想知道你们中是否有人知道。
非常感谢您,新年快乐!
约翰
您的库代码中根本没有添加任何开销。引入新的子类根本不会改变 CLR 的行为。您可以想象一个执行类层次结构分析或运行时优化的 CLR 版本,它内联方法或优化转换,其中存在其他子类可能会默认这些优化。但我不知道有任何 CLR 实现会进行这些优化(当然 MS CLR 没有)。
但是使用 Python 子类可能会慢一些。这是因为 Python 子类将覆盖所有虚拟成员 - 然后这些覆盖将需要分派给实现重载的 Python 函数或基类。因此,每当您使用 Python 中的子类化对象时,调用虚拟方法的速度会稍慢一些。额外的开销将包括对 Python 类型对象的一个或多个字典查找,以查看该方法是否在那里实现。