델리게이트를 성능에 대해 지나치게 나쁜 생각으로 사용하고 있습니까?
if (IsDebuggingEnabled) {
instance.Log(GetDetailedDebugInfo());
}
GetDetailedDebugInfo()
를, 그래서 우리는 우리가 디버그 모드에서 실행하는 경우를 호출 할 :
는 다음과 같은 코드를 생각해 보자.
의 의지금, 청소기 대안이 뭔가를 코드하는 것입니다
instance.Log(() => GetDetailedDebugInfo());
.LOG는()와 같은 정의되는 경우 :
public void Log(Func<string> getMessage)
{
if (IsDebuggingEnabled)
{
LogInternal(getMessage.Invoke());
}
}
내 관심사는 성능이다, 예비 시험은 '아무튼 두 번째 사례가 특히 비싸다는 것을 보여 주지만 부하가 증가하면 어떤 놀라움에 빠지기를 원하지 않습니다.
가이 경우에 적용되지 않기 때문에 아, 그리고 조건부 컴파일을 제안하지 마십시오.
(P.S : 나는 미묘한 버그가있는 경우 이렇게 저를 비난하지 않는 질문 텍스트 영역을 물어 StackOverflow의에서 직접 코드를 작성하고 당신이 요점을 파악, 컴파일되지 않습니다 :
증가 된로드를 시뮬레이트하기에 충분히 쉽습니다. 테스트 케이스를 설정하여 두 옵션을 수만 번의 반복 작업을 수행하는 타이트한 루프 내에서 실행하고 비교할 수 있습니다. – Amber