2017-10-24 12 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; 
    ... 
} 

대 그래서 일반적인 합의가 (조기) 성능에 최적화 된 코드를 통해 가독성을 선호하는 것으로 나타납니다. 그래서 적어도 지금은 원래 작성된 코드를 유지했습니다.