2010-02-02 2 views
2

'아무것도 안 함'기본 이벤트 처리기를 사용하면 성능상의 단점이 있습니까?

public event EventHandler StatusChanged = (s,e) => {}; 
private void ChangeStatus() 
{ 
    StatusChanged(this, new EventArgs()); 
} 

각 개체에 대해 해당 이벤트에 구독자가 등록되지 않은 경우 no-op 이벤트 처리기를 사용하면 성능상의 단점을 제공합니까? ? 아니면 CLR을 무시할만큼 똑똑합니까? 또는 이벤트를 시작하기 전에 StatusChanged 처리기를 확인하는 것이 좋습니다.

답변

2

예, CLR은이를 무시할만큼 똑똑하지 않지만 대부분의 경우 무시해도 좋습니다.

메서드 호출은 큰 문제가 아니며 응용 프로그램의 성능에 유의미한 영향을 미치지 않습니다.

+0

5000 개의 개체가 동시에 이벤트를 동시에 실행한다고 말하면 어떻게됩니까? 그게 눈에 띄는 효과가 있을까요? – Marcus

+0

@Marcus : 5000은 3GHz 프로세서의 경우 큰 숫자가 아니지만 걱정되는 경우 빈 핸들러를 추가하는 대신 무효를 확인하십시오. –

+0

@Marcus : Profiler 만 해당 질문에 대답 할 수 있습니다. –

1

응용 프로그램이 ChangeStatus를 초당 천 번 호출하면 어쩌면 문제가 될 수 있습니다. 그러나 프로파일 러만이 사실을 입증 할 수 있습니다.

+2

필자는 프로파일 러만 성능 문제인지 확실히 알 수 있다고 동의합니다. 하지만 난 항상 해킹이 될 null 체크를 얻으려고 빈 이벤트 처리기를 추가하는 관행을 찾았습니다. 다시 말하지만, 매우 성능에 민감한 코드를 작성하기 때문에 필자의 관점이 다소 비뚤어 질 수 있습니다. – Pepor

+0

@Pepor : 더 이상 동의 할 수 없습니다. 대부분의 경우 성능 측면에서 문제가되는 것은 거의 없지만 이는 단지 IMO 해킹 일뿐입니다. –

관련 문제