私は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
私は後者を好む、それは読みやすく、デバッグだが、私は余裕がないので、これはされますされ
それが存在すればパフォーマンスの低下。
注:私はすでにこのコードをボトルネックと認識しています。早すぎる最適化についてのレトルトの必要はありません。 :-)
余分な20バイトのRAMを用意する余裕はありませんか?これは、特にこのコードが繰り返し実行されるたびに、同じ20バイトごとに同じように、アプリのパフォーマンスを左右することはほとんどありません。 –
MSILへの翻訳中に、この種の最適化のためのコンパイラ(JITではありません)が "責任を負う"でしょうか? (そして、MS C#コンパイラがどの程度最適化しているかは、どのような場合でも可能です。)どんな場合でも、相対論的な環境*でベンチマークすることは、より速く、かつ、ある程度「確実に知る」唯一の方法です。 –
あなたはこの質問に答えることができる唯一の人です。あなたは両方の方法でコードを書いています。両方の方法で実行し、タイミングを測定すると、どちらが速いかがわかります。ジッタが行うこととしないことは無関係です。ジッタが何をしているかを知ることは、「どちらが速いの? –