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

Mat*_*ley 8 .net extension-methods

可能重复:
扩展方法性能

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

public static void WriteElementString(this XmlTextWriter writer, string name, int data)
{
    writer.WriteElementString(name, data.ToString());
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 20

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

换句话说,扩展方法的开销与完全相同

writer.WriteElementString(name, data);
Run Code Online (Sandbox Code Playgroud)

就像你刚刚打电话一样

XmlWriterExtensions.WriteElementString(writer, name, data);
Run Code Online (Sandbox Code Playgroud)

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

在性能方面,"每秒数千次以上"并不算什么.拥有额外级别堆栈的开销在该级别上是完全无关紧要的......即使该方法没有内联,我相信这很可能是在这种情况下.

但是,正常的性能规则适用:在您测量之前,这一切都是猜测.或者至少,在这种情况下实际击中是猜测; "扩展方法只是在编译器中使用语法糖的常规方法"并不是猜测.