2009-09-18 19 views
7

Duplicar posibles:
Extension Method Performance¿Qué sobrecarga está asociada con un método de extensión en tiempo de ejecución? (NET)

En una aplicación crujido de datos que es CPU y/o memoria de acceso vinculado, es la sobrecarga de un una línea método de extensión notable? ¿Es más alto que una llamada a función normal, o es simplemente una abstracción de compilador/IDE? Por ejemplo, sería poco aconsejable la siguiente función si estaba siendo llamado más de varios miles de veces por segundo:

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

Respuesta

18

No hay ninguna sobrecarga. Es solo un método estático llamado con diferente sintaxis. El IL generado es solo una llamada normal.

En otras palabras, la sobrecarga para su método de extensión es exactamente el mismo para

writer.WriteElementString(name, data); 

como si usted acaba de llamar

XmlWriterExtensions.WriteElementString(writer, name, data); 

... porque la IL generada será exactamente el mismo .

En términos de rendimiento, "más de varios miles de veces por segundo" es nada. La sobrecarga para tener un nivel extra de pila será completamente insignificante en ese nivel ... incluso si el método no está en línea, lo que creo que es muy probable que sea en este caso.

Sin embargo, se aplica la regla de rendimiento normal: todo es conjetura hasta que haya medido. O al menos, el real golpe en este caso es conjetura; los "métodos de extensión son solo métodos normales con azúcar sintáctico en el compilador" no son conjeturas.

3

Sin sobrecarga, es solo un azúcar sintáctico, su simple abstracción de compilador.

+2

azúcar sintáctica? ¿O es así como se fabrica la sucralosa? –

Cuestiones relacionadas