2016-07-31 5 views
0

.exe를 실행하면 Debug.WriteLine() 효과가 8 배 향상됩니다.
디버그 문이 디버그에 성능에 어떤 영향을 줄 수 있습니까?
디버그 효과가없는 .exe 성능을 어떻게 가질 수 있습니까?
counterRequals는 이후에 참조되므로 건너 뛸 수 없습니다.
이 경우 10 억 회를 초과합니다.Debug.WriteLine 비 디버그 성능 수행

if (innerInnerLoopCount > 1 && r == innerInnerLoopCount) 
{ 
    counterRequals++; 
    Debug.WriteLine(""); 
} 
+6

'Debug' 멤버는 [ConditionalAttribute] (http://msdn.microsoft.com/en-us/library/system.diagnostics.conditionalattribute.aspx)가 할당되어있어 'Release' '모드. 디버거없이'Debug' 빌드를 실행하고있는 것처럼 들립니다. 'Debug'와 같은 기능이 필요하다면 [Trace] (https://msdn.microsoft.com/en-us/library/system.diagnostics.trace (v = vs.110) .aspx) 클래스를 사용하는 것이 좋습니다. 당신은 10 억의 히트로 퍼프 (perf) 문제를 치게 될 것입니다. [EventSource] (https://msdn.microsoft.com/en-us/library/system.diagnostics.tracing.eventsource.aspx) – keyboardP

+3

을 디버깅하지 않았다고해서 컴파일하지 않았다는 것을 의미하지는 않습니다. 디버그 모드에서. 디버그 또는 릴리스 모드에서 컴파일 했습니까? – sstan

+1

왼쪽 연산자식이 잘못 예측 될 경우 && 연산자의 비용이 높기 때문에 분기 예측이 실패하면 작업이 약 5 배까지 느려질 수 있습니다. 10 억을 곱하면 약 2 초 동안 아무 것도하지 않아도됩니다. 피연산자를 교체하십시오. 그리고 브랜칭을 전혀 사용하지 않는 빠른 버전을 선호합니다 :'if (r == innerInnerLoopCount & innerInnerLoopCount> 1)' –

답변

1

Debug 회원들이 Release 모드에 존재하지 않습니다 그래서 ConditionalAttribute 자신에게 할당해야합니다. 디버거없이 Debug 빌드를 실행하고있는 것 같습니다. 디버그와 같은 기능이 필요하다면, 대신 Trace class을 사용하는 것이 좋습니다. 단, 10 억 개의 히트를 사용하여 성능 문제가 발생할 가능성이 있습니다. 이 경우 높은 성능 로깅을 허용 할 수있는 EventSource을 볼 수 있습니다.

관련 문제