He leído varios artículos y preguntas/respuestas que concluyen que la mejor práctica es permitir que el compilador JIT haga toda la optimización para las llamadas de función en línea. Tiene sentido.¿El compilador JIT optimiza (en línea) las declaraciones de variables innecesarias?
¿Qué pasa con las declaraciones de variables en línea? ¿El compilador también optimiza estos?
Es decir, será la siguiente:
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
tener un mejor rendimiento que esto:
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
Por supuesto que prefieren este último porque es más fácil de leer y depurar, pero no puede permitirse el lujo la degradación del rendimiento si existe.
Nota: Ya he identificado este código como un cuello de botella: no hay necesidad de retortas sobre la optimización prematura. :-)
¿No puede pagar 20 bytes adicionales de RAM?Es muy poco probable que esto impulse el rendimiento de su aplicación, especialmente si este código se ejecuta una y otra vez, son los mismos 20 bytes cada vez. –
¿No sería el compilador (no el JIT!) El "responsable" de este tipo de optimización durante la traducción a MSIL? (Y si, entonces, en qué medida optimiza el compilador de MS C#). En cualquier caso * hágalo en un entorno relativista * ya que esa es la única forma de "saber con certeza", que es más rápido y en qué medida. –
Usted es la única persona aquí que puede responder la pregunta. Has escrito el código en ambos sentidos. Ejecútalo en ambos sentidos, mide el tiempo y luego sabrás cuál es más rápido. Lo que el jitter hace o deja de hacer es irrelevante; saber lo que hace la trepidación de ninguna manera responde a la pregunta "¿cuál es más rápido?" –