-1

null合体演算子をアクセサーメソッド内に配置するとパフォーマンスに影響があるかどうか、stackoverflowで調べていました。

前:

private Uri _Url;
public Uri Url
{
    if(_Url == null)
        _Url = new Uri(Utilities.GenerateUri());
    return _Url;
}

後:

private Uri _Url;
public Uri Url 
{
    get 
    {
        return _Url = _Url ?? new Uri(Utilities.GenerateUri());
    }
}

構文が正しいかどうかもわかりませんが、デバッグするとプライベート オブジェクトが設定されます。

誰かがそれを行う意味を尋ねる前に、読みやすさのために書くか (最初の方が読みやすいように見えます)、パフォーマンスのために書くかを社内で議論していました。

コンパイラが最適化するかどうかわかりません?? 常に手動で null チェックを行うよりも優れています。マイクロ最適化は悪いですが、私はただ興味があります

4

1 に答える 1

2

これは実際には次のように記述できます。

return _Url ?? (_Url = new Uri(Utilities.GenerateUri()));

性能的にはifを使うのとほとんど変わらないので違いはありません。

于 2013-10-23T07:02:30.930 に答える