Оптимизирует ли JIT-компилятор (встроенные) объявления ненужных переменных?

Я прочитал несколько статей и вопросов / ответов, в которых делается вывод, что лучше всего позволить компилятору JIT выполнять всю оптимизацию для вызовов встроенных функций. Имеет смысл.

А как насчет объявлений встроенных переменных? Оптимизирует ли и их компилятор?

То есть будет ли это:

        Dim h = (a + b + c) / 2       'Half-Perimeter

        If maxEdgeLength / (Math.Sqrt(h * (h - a) * (h - b) * (h - c)) / h) <= MaximumTriangleAspectRatio Then
           'Do stuff here.
        End If

Лучше производительность, чем это:

        Dim perimeter = a + b + c   'Perimeter
        Dim h = perimeter / 2       'Half-Perimeter

        Dim area = Math.Sqrt(h * (h - a) * (h - b) * (h - c)) 'Heron's forumula.
        Dim inradius = area / h
        Dim aspectRatio = maxEdgeLength / inradius

        If aspectRatio <= MaximumTriangleAspectRatio Then
            'Do stuff here.
        End If

Конечно, я предпочитаю последнее, потому что его легче читать и отлаживать, но я не могу позволить себе снижение производительности, если оно существует.

Примечание: я уже определил этот код как узкое место - нет необходимости в возражениях о преждевременной оптимизации. : -)

8
задан Joel Coehoorn 20 October 2011 в 20:58
поделиться