在运行时与扩展方法相关的开销是多少? (。净)

时间:2009-09-18 06:31:16

标签: .net extension-methods

  

可能重复:
  Extension Method Performance

在CPU和/或内存访问限制的数据运算应用程序中,单行扩展方法的开销是否显着?它是否比普通函数调用更高,还是仅仅是编译器/ IDE抽象?例如,如果以下函数每秒被调用数千次,那么它是否会被告知:

public static void WriteElementString(this XmlTextWriter writer, string name, int data)
{
    writer.WriteElementString(name, data.ToString());
}

2 个答案:

答案 0 :(得分:18)

没有开销。它只是一个用不同语法调用的静态方法。生成的IL只是一个正常的调用。

换句话说,扩展方法的开销与

完全相同
writer.WriteElementString(name, data);
好像你刚刚打电话

XmlWriterExtensions.WriteElementString(writer, name, data);

...因为生成的IL将完全相同。

就性能而言,“每秒数千次以上”是 nothing 。拥有额外级别堆栈的开销在该级别上是完全无关紧要的......即使该方法没有内联,我相信这很可能是在这种情况下。

然而,正常的表现规则适用:在你测量之前,这一切都是猜测。或者至少,在这种情况下实际命中是猜测; “扩展方法只是在编译器中使用语法糖的常规方法”并不是猜测。

答案 1 :(得分:3)

根本没有开销,它只是一个语法糖,它只是编译器抽象。