在CPU和/或内存访问限制的数据运算应用程序中,单行扩展方法的开销是否显着?它是否比普通函数调用更高,还是仅仅是编译器/ IDE抽象?例如,如果以下函数每秒被调用数千次,那么它是否会被告知:
public static void WriteElementString(this XmlTextWriter writer, string name, int data)
{
writer.WriteElementString(name, data.ToString());
}
答案 0 :(得分:18)
没有开销。它只是一个用不同语法调用的静态方法。生成的IL只是一个正常的调用。
换句话说,扩展方法的开销与
完全相同writer.WriteElementString(name, data);
好像你刚刚打电话
XmlWriterExtensions.WriteElementString(writer, name, data);
...因为生成的IL将完全相同。
就性能而言,“每秒数千次以上”是 nothing 。拥有额外级别堆栈的开销在该级别上是完全无关紧要的......即使该方法没有内联,我相信这很可能是在这种情况下。
然而,正常的表现规则适用:在你测量之前,这一切都是猜测。或者至少,在这种情况下实际命中是猜测; “扩展方法只是在编译器中使用语法糖的常规方法”并不是猜测。
答案 1 :(得分:3)
根本没有开销,它只是一个语法糖,它只是编译器抽象。