2010-06-28 2 views
2

컴파일러 작성 중이고이 컴파일러의 기능 중 하나는 값 형식에 대해 GetHashCode(), Equals (개체) 및 Equals (이 값 형식) 메서드를 자동으로 생성한다는 것입니다. 지금 같음을 ({이 값 유형은}) 구현은 기본적으로이 C#을에 의해 생성 된 위원장에 위원장과 동등한를 생성대형 .maxstack에 대한 성능 저하는 무엇입니까?

public bool Equals(ThisType o) 
{ 
    return Field1 == o.Field1 && Field2 == o.Field2 && Field3 == o.Field3;//etc 
} 

제 컴파일러는 스택에서 이러한 모든 개체를 밀어 후 비교 '와'시작 그들을 함께 보내라. 이로 인해 메소드의 .maxstack이 매우 빠르게 커집니다. 이것에 대한 벌칙이 있습니까? 그렇다면, 어느 시점에서 나는 지역 주민들에게 가치를 부여해야 할 것인가?

감사합니다.

답변

2

중요한 시나리오를 측정하고 알아내는 이유는 무엇입니까? 귀하의 성능은 .NET 버전 또는 프로세서 아키텍처에 따라 잠재적으로 다를 수 있으므로 귀하가 신경 쓰는 변종을 실제로 측정 할 수 있습니다. 내가 이해할 때 maxstack이 주로 검증에 사용되므로 은 성능 저하가 거의 없을 것이라고을 추측합니다. 실제로 알 수있는 유일한 방법은 실제로 측정하는 것입니다.

또한, 귀하의 경우에는 어쨌든 스택을 성장시키지 않으려면 현지인이 필요하지 않습니다. 다음과 같이 대신 할 수 있습니다.

load Field1 
    load o.Field1 
    branch to end if not equal 
    load Field2 
    load o.Field2 
    branch to end if not equal 
    ... 
    return true 
end: 
    return false 

이것은 필드 수에 관계없이 상수 스택 공간을 사용합니다.

관련 문제