Usando propiedades y rendimiento
Estaba optimizando mi código y noté que el uso de propiedades (incluso propiedades automáticas) tiene un profundo impacto en el tiempo de ejecución. Vea el siguiente ejemplo:
[Test]
public void GetterVsField()
{
PropertyTest propertyTest = new PropertyTest();
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
propertyTest.LoopUsingCopy();
Console.WriteLine("Using copy: " + stopwatch.ElapsedMilliseconds / 1000.0);
stopwatch.Restart();
propertyTest.LoopUsingGetter();
Console.WriteLine("Using getter: " + stopwatch.ElapsedMilliseconds / 1000.0);
stopwatch.Restart();
propertyTest.LoopUsingField();
Console.WriteLine("Using field: " + stopwatch.ElapsedMilliseconds / 1000.0);
}
public class PropertyTest
{
public PropertyTest()
{
NumRepet = 100000000;
_numRepet = NumRepet;
}
int NumRepet { get; set; }
private int _numRepet;
public int LoopUsingGetter()
{
int dummy = 314;
for (int i = 0; i < NumRepet; i++)
{
dummy++;
}
return dummy;
}
public int LoopUsingCopy()
{
int numRepetCopy = NumRepet;
int dummy = 314;
for (int i = 0; i < numRepetCopy; i++)
{
dummy++;
}
return dummy;
}
public int LoopUsingField()
{
int dummy = 314;
for (int i = 0; i < _numRepet; i++)
{
dummy++;
}
return dummy;
}
}
EnRelease
modo en mi máquina obtengo:
Using copy: 0.029
Using getter: 0.054
Using field: 0.026
que en mi caso es un desastre: el ciclo más crítico simplemente no puede usar ninguna propiedad si quiero obtener el máximo rendimiento.
¿Qué estoy haciendo mal aquí? Estaba pensando que estos seríaninlined
por elJIT optimizer
.