Cuando, si alguna vez, es más rápido pasar argumentos como argumentos a un método estático en lugar de tener el método no estático y acceder a los mismos valores a través de los miembros de la instancia. Supongamos que el método accede a estos miembros de forma solo de lectura.¿Puede hacer un método para mejorar el rendimiento estático y bajo qué circunstancias?
En igualdad de condiciones, llamar a un método estático es slightly faster que llamar a un método de instancia.
En igualdad de condiciones, llamar a un método sin argumentos es un poco más rápido que llamar a uno con argumentos.
considerar:
private Thing _thing;
void DoTheThing()
{
_thing.DoIt();
}
Versus este código equivalente:
private Thing _thing;
// caller's responsibility to pass "_thing"
static void DoTheThing(Thing thing)
{
thing.DoIt();
}
No puedo pensar en una situación del mundo real, donde este tipo de optimización se lograsen ningún valor, sino como una experimento de pensamiento (para aquellos a quienes les gusta discutir este tipo de cosas), ¿hay realmente un beneficio, y si es así, cuántos argumentos (de qué tipos, etc.) inclinar la balanza hacia el otro lado?
¿Algún otro factor tendrá en cuenta esto? El método estático accede a _thing
como una variable local en lugar de un campo, por ejemplo.
+1 Buena pregunta. Cuando ejecuta Code Analysis en su código en VS obtiene el error CA1822 si sus métodos en su clase pueden marcarse como estáticos. Siempre me molesta, y realmente me pregunto si hay algún beneficio. – BFree
@BFree: si sigues el enlace que incluí en la pregunta, puedes ver que llamar a un método estático es cada vez más rápido. En IL, la persona que llama no tiene que insertar una referencia al objetivo en la pila (el JIT probablemente lo anula), y el EE no tiene que comprobar que este objetivo sea nula. –
Sí, hay una ganancia en el rendimiento, pero es probable que no lo veas hasta que estés llamando al método en un ciclo durante cientos de miles de veces. Optimización prematura. –