[英]'New' instead of virtual + overide hack for high-performance and inlining
C#(.NET)中的虚函数,引擎盖引起额外的方法表引用的开销,也永远不会内联。
所以,我想知道如果在高性能场景中,它不是推荐的方式,最好用新的方法隐藏旧方法,以获得更好的性能,并实现JIT内联。
这是一个OKAY练习吗?
除了重新键入基类之外还有什么后果(顺便说一句,在直接从接口派生的场景中,它可以“部分”无害。
摘要:
让我快速总结下面到目前为止的评论和答案,以造福他人。
在这方面对JIT编译器行为的任何文档引用或“内部独家新闻”都会非常有帮助:)
拥有虚拟方法是一项功能。 它提供了额外的功能。 该功能不是免费的(尽管它很便宜)。 如果您不需要该功能,可以将其关闭,并可能获得一些边际性能优势; 这些可能或可能不足以解决问题(您需要进行一些性能测试才能知道;当然,请注意,基准测试微观优化很难正确完成,所以要小心)。
如果你需要这个功能,并希望有多态行为,那么关闭它真的不是一个选择。 您可以尝试编写自己的虚拟方法系统而不使用该语言的功能 ,但您的实现几乎肯定会变慢,所以我建议不要这样做。
简而言之,如果您需要该功能,请将其打开,如果不需要,请将其关闭。 几乎肯定不会基于性能考虑做出决定,而是根据您编写的代码的要求做出决定。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.