Usando propriedades e desempenho

Eu estava otimizando meu código e percebi que o uso de propriedades (mesmo propriedades automáticas) tem um impacto profundo no tempo de execução. Veja o exemplo abaixo:

[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;
    }
}

NoRelease modo na minha máquina, recebo:

Using copy: 0.029
Using getter: 0.054
Using field: 0.026 

que, no meu caso, é um desastre - o loop mais crítico simplesmente não pode usar nenhuma propriedade se eu quiser obter o máximo desempenho.

O que eu estou fazendo errado aqui? Eu estava pensando que estes seriaminlined peloJIT optimizer.

questionAnswers(5)

yourAnswerToTheQuestion