2017-10-24 8 views
1

私は数多くのプロパティのゲッターで計算を行う数学クラスを持っています。今度は、これらのプロパティを変換して、最初の評価がその後の結果のみを返すようにしました。短絡ゲッターとレイジーゲッターのクラスのパフォーマンス

パフォーマンスについては、コレクションに格納されているインスタンスが数千ないし数千になる可能性が高いことを考えれば、平均的には最高のアプローチが考えられます。

GCの負荷が増大し、nullablesが離れ、親オブジェクトからメモリを割り当てますと、それはまた、参照の局所性に影響を与えます。私には関係

物事は後者のアプローチがあることです。

public class SomeMathType 
{ 
     ... 
    private double? _length; 
    private Vector? _vector; 

    // these are structs 
    public Vector A { get; } 
    public Vector B { get; } 

    public Vector Vector 
    { 
     get 
     { 
      _vector = _vector ?? B - A; 
      return _vector.Value; 
     } 
    } 

    public double Length 
    { 
     get 
     { 
      _length = _length ?? Vector.Length; 
      return _length.Value; 
     } 
    } 
     ... 
} 
+5

[あなたの馬を走らせる](https://ericlippert.com/2012/12/17/performance-rant/) – Equalsk

+0

純粋なパフォーマンスプロファイリングでは何も確立されません。これらのプロパティがどれくらいの頻度でアクセスされているか、リストされている問題がどれだけ高価かなどによって、複雑な指標になります...しかし、おそらく違いはありませんが、より読みやすいオプションにするのが最善です。私はちょうど他の人がそれについて何を言わなければならないのだろうかと思っていた... – zman

+0

なぜコンストラクタで結果のベクトルを計算し、それがnullでないようにするのですか? –

答えて

0

public class SomeMathType 
{ 
    // these are structs 
    public Vector A { get; } 
    public Vector B { get; } 
    ... 
    public double Length => A + B; 
    ... 
} 

対は、だから、一般的なコンセンサスが(途中で)パフォーマンス最適化されたコードの上に読みやすさを優先していることが表示されます。だから私は最初に書かれたコードを少なくとも今のところ保ってきました。

関連する問題