これは愚かな質問かもしれません。私はコンパイラが未使用の地元住民を取り除くことを知っています。私はこのように私のコードを書くなら:プロパティが割り当てられている場合、C#コンパイラは未使用のローカルを削除しますか?
class MyClass
{
public int SomeProperty
{
get
{
...
}
}
public void SomeFunction()
{
//will this line be removed if i is never used?
int i = SomeProperty;
...
}
}
私は疑問に思ってi
があるため、最適化のコンパイラによって削除される場合に。実行したいSomeProperty
のゲッターの中にロジックがあります。 i
が削除される場合は、SomeProperty
を関数に変更する必要があります。
Btwは、どのラインがコンパイラによって最適化されるのかを知る方法はありますか?
あなたは大丈夫でしょう!コンパイラそれは知っているほどスマートです – Charleh
私はコンパイラが何をすることが重要ではないことを示唆しています。これは悪いデザインです。ゲッターを呼び出すことが重要な副作用を持っている場合、ゲッターではないはずです。ゲッターはおそらく怠惰な初期化をしているはずですが、これが重要ではありません。なぜなら、それが起こらなければ、それを得るためには次のことで済むからです。私はあなたが何をしているのか分からないが、おそらくその時点で明示的に呼び出すことができる独自のメソッドにリファクタリングする必要があります。他の誰もコードを見ている誰かが無意味な割り当てとしてそれをリファクタリングするかもしれません... – Chris
関連:http://stackoverflow.com/a/2162893/284240 "** C#コンパイラはこの種の最適化を決してしません** ;そうすることで、コンパイラが呼び出されているコードにコンパイラのピアを呼び出し、それが計算した結果が呼び出し先のコードの寿命にわたって変化しないことを確認する必要があります。可能性があります。** " –