2

如果我将扩展方法添加到程序中,它的成本是多少?
它会工作较慢或可能会加载速度较慢?
谢谢。扩展方法是否太贵?

+1

这是你可以通过编写一个10行程序检查自己的东西 – Andrey 2010-08-16 13:45:01

+0

如果执行速度稍微慢一点,这是否重要? – 2010-08-16 20:46:30

+1

Andrey,我同意,对于程序员来说,通过快速丢弃性能测试来调查非常具体的性能问题比在SO上提出问题更具启发性。 – marr75 2010-08-16 20:48:53

回答

9

如果我将扩展方法 添加到我的程序 性能,它会花多少钱?它会工作较慢,或可能会加载速度较慢的 ?

不会有性能问题。扩展方法实际上是静态方法。

1

它肯定不会加载得慢,因为加载程序不依赖于程序中的执行路径。

至于跑得慢多少?只有测量延长方法和非延长方法花费的时间才能确定。我怀疑这种差异即使实际可测量也不会很大。

重要的考虑因素应该是“扩展方法是否使我的代码更清晰,更易于理解和维护”。

4

扩展方法只是应用于静态方法的语法糖。

从理论上讲,静态方法比非虚拟实例方法更快(无需检查空this),而该方法反过来比虚拟实例方法(无需查找实现来调用)更快。

理论上,优化也可以消除这些差异。在涉及到扩展方法时,它在静态方面也被夸大了,因为对象可能会以某种方式来处理,无论如何要求使用空值检查(无论是明确的还是隐式的)。

在实践中,无论扩展方法的确会产生更多的影响,无论是扩展还是实例,都有可能出现这种情况。

4

我很快在一个很长的运行循环中使用一些整数扩展方法对性能进行了测试,发现在我测试的情况下,性能通常是相同的。在调试或运行未优化的程序集时,扩展方法的运行速度大约是我的控件情况的两倍,这很有意义,因为调试程序不能内联这些方法并必须跟踪调用堆栈等。

因此,大会准备发布,没有性能损失。