1

したがって、.NET では、プロパティの値を取得する方が、フィールドの値よりもコストがかかることがわかっています。ただし、プロパティのゲッターに何らかのロジックが含まれている場合に限ります。私の質問は、二重のようなものです。次の例を検討してください。

foreach(var item in collection)
{
    item.SomeField = StaticClass.PropertyA.PropertyB.PropertyC;
}

したがって、(うまくいけば明らかに)StaticClassは静的クラスであり、その右側にあるすべてのプロパティは、何らかのクラスのインスタンスです。さらに、すべてのプロパティは純粋にフィールドのラッパーであり、PropertyAフィールドを返すだけのゲッターと、そのフィールドに割り当てるセッターなどがあります。

この実行をステップ実行すると、値を取得するために 3 つのメソッド呼び出しを行う必要があることがわかります ( get_PropertyA()get_PropertyB()get_PropertyC())。私が持っている最初の質問は次のとおりです。

コンパイラは、この展開を最適化して、これら 3 つのメソッド呼び出しを 1 回だけ評価する (つまり、本体をインライン化する) か? それとも、反復ごとに 3 つのメソッド呼び出しを行うのでしょうか?

私は後者が真実であると信じるようになります。

さらに、この特定のコードがアプリケーション全体で頻繁に使用されているとします。PropertyC後者の場合、ループに入る前に の値をローカル変数に格納し、そのローカル変数をループ内で使用して、メソッド自体を最適化しようとするのは理にかなっていますか?

前もって感謝します。この質問は議論の側面に傾いていますが、決定的な答えがあると確信しています.

4

1 に答える 1