繁体   English   中英

对于高性能和内联而言,“新”而不是虚拟+过度攻击

[英]'New' instead of virtual + overide hack for high-performance and inlining

C#(.NET)中的虚函数,引擎盖引起额外的方法表引用的开销,也永远不会内联。

所以,我想知道如果在高性能场景中,它不是推荐的方式,最好用新的方法隐藏旧方法,以获得更好的性能,并实现JIT内联。

这是一个OKAY练习吗?

除了重新键入基类之外还有什么后果(顺便说一句,在直接从接口派生的场景中,它可以“部分”无害。

摘要:

让我快速总结下面到目前为止的评论和答案,以造福他人。

  1. 它几乎不是一个好主意,会影响多态性和可读性。
  2. 在我的测试中,内联确实在某些情况下提供了显着的差异。
  3. 需要研究: JIT编译器可能会内联这些虚拟方法。 (可能只在密封的课程下)。

在这方面对JIT编译器行为的任何文档引用或“内部独家新闻”都会非常有帮助:)

拥有虚拟方法是一项功能。 它提供了额外的功能。 该功能不是免费的(尽管它很便宜)。 如果您不需要该功能,可以将其关闭,并可能获得一些边际性能优势; 这些可能或可能不足以解决问题(您需要进行一些性能测试才能知道;当然,请注意,基准测试微观优化很难正确完成,所以要小心)。

如果你需要这个功能,并希望有多态行为,那么关闭它真的不是一个选择。 您可以尝试编写自己的虚拟方法系统而不使用该语言的功能 ,但您的实现几乎肯定会变慢,所以我建议不要这样做。

简而言之,如果您需要该功能,请将其打开,如果不需要,请将其关闭。 几乎肯定不会基于性能考虑做出决定,而是根据您编写的代码的要求做出决定。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM