gpt4 book ai didi

.net - 密封类真的提供性能优势吗?

转载 作者:太空狗 更新时间:2023-10-29 22:01:51 25 4
gpt4 key购买 nike

我遇到过很多优化技巧,它们说您应该将类​​标记为密封的以获得额外的性能优势。

我运行了一些测试来检查性能差异,但没有找到任何结果。难道我做错了什么?我是否错过了密封类(class)会产生更好结果的情况?

有没有人运行过测试并发现了差异?

帮我学习:)

最佳答案

答案是否定的,密封类的性能并不比非密封类好。

2021 年:现在的答案是肯定的,密封类会带来性能上的好处。

密封一个类可能并不总能提高性能,但 dotnet 团队正在采用密封所有内部类的规则,以便为优化器提供最佳机会。

详情请阅读https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-6/#peanut-butter

下面是旧答案。

问题归结为 callcallvirt IL 操作代码。 Callcallvirt快,callvirt主要用在不知道对象是否被子类化的时候。所以人们假设如果你密封一个类,所有的操作代码将从 calvirts 变为 calls 并且会更快。

不幸的是,callvirt 还做了其他一些有用的事情,比如检查空引用。这意味着即使一个类是密封的,引用可能仍然是空的,因此需要一个 callvirt。您可以解决这个问题(无需密封类(class)),但它变得有点毫无意义。

结构使用 call 因为它们不能被子类化并且永远不会为 null。

有关更多信息,请参阅此问题:

Call and callvirt

关于.net - 密封类真的提供性能优势吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3633614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com