Przeczytałem kilka artykułów i pytań/odpowiedzi, które kończą najlepszą praktyką, to pozwolić kompilatorowi JIT wykonać całą optymalizację wywołań funkcji inline. Ma sens.Czy kompilator JIT optymalizuje (inline) niepotrzebne deklaracje zmiennych?
Co z deklaracjami zmiennych wstawianych? Czy kompilator również je optymalizuje?
Oznacza to, że będzie to:
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
mają lepsze osiągi niż to:
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
Oczywiście wolę ten ostatni, ponieważ jest to łatwiejsze do odczytania i debugowania, ale nie mogę sobie pozwolić pogorszenie wydajności, jeśli istnieje.
Uwaga: Zidentyfikowałem już ten kod jako wąskie gardło - nie ma potrzeby stosowania retorty o przedwczesnej optymalizacji. :-)
Nie stać Cię na dodatkowe 20 bajtów pamięci RAM?Jest to mało prawdopodobne, aby zwiększyć wydajność aplikacji, zwłaszcza, że ten kod jest uruchamiany wielokrotnie za każdym razem o 20 bajtów. –
Czy kompilator (a nie JIT!) Nie byłby "odpowiedzialny" za tego rodzaju optymalizację podczas tłumaczenia na MSIL? (A jeśli tak, w jakim stopniu optymalizuje kompilator MS C#.) W każdym razie * porównuj go w relatywistycznym środowisku *, ponieważ jest to jedyny sposób "na pewno wiedzieć", który jest szybszy iw jakim zakresie. –
Jesteś jedyną osobą, która może odpowiedzieć na to pytanie. Napisałeś kod w obie strony. Uruchom go w obie strony, zmierz czas, a następnie dowiesz się, który z nich jest szybszy. To, co robi lub nie robi jitter, jest nieistotne; wiedza na temat tego, jitter nie odpowiada na pytanie "który z nich jest szybszy?" –