如果我向其添加扩展方法,我的程序性能需要多少费用? 它会工作得更慢还是可能会加载更慢? 感谢。
答案 0 :(得分:9)
我的节目需要多少钱 如果我添加扩展方法的性能 对吗?它会工作得更慢还是可能 会加载慢吗?
不会有性能损失。扩展方法实际上是静态方法。
答案 1 :(得分:4)
扩展方法只是应用于静态方法的语法糖。
理论上,静态方法比非虚拟实例方法更快(不需要检查null this
),这反过来比虚拟实例方法更快(不需要查找实现到呼叫)。
理论上,优化也可以消除这些差异。在扩展方法方面,它在静态方面也被夸大了,因为对象可能会以这样的方式处理,无论如何都需要进行空检查(无论是明确的还是隐式的)。
在实践中,无论扩展方法做什么,都会产生更大的影响,无论是扩展还是实例。
答案 2 :(得分:4)
我在一个真正长时间运行的循环中使用一些整数扩展方法快速性能测试了这一点,并发现在我测试的情况下,性能通常是相同的。在调试或运行未经优化的程序集时,扩展方法的运行速度大约是我的控制情况的两倍,这是有道理的,因为调试器无法内联这些方法并且必须跟踪调用堆栈等。
因此,在准备发布的程序集中,没有性能损失。
答案 3 :(得分:1)
它当然不会加载得更慢,因为加载程序不依赖于程序中的执行路径。
至于跑得更慢?仅测量延伸方法和非延伸方法所花费的时间将确定。我怀疑即使它实际上是可测量的,差异也不会很大。
重要的考虑应该始终是“扩展方法是否使我的代码更清晰,更易于理解和维护”。