2011-03-21 7 views
0

이벤트에 재귀 적으로 EventHandler를 추가하는 것처럼 보이는 클래스가 있습니다. 코드를 살펴 봤는데 AddHandler이없고 Handles 절이있는 유일한 방법이 하나 있습니다.이벤트의 이벤트 핸들러 관리

메모리 프로파일 러에서 이벤트 처리기가 이벤트 처리기를 호출하는 이벤트 처리기 등을 호출하는 것으로 나타납니다.

무엇이 원인 일 수 있습니까? 상황을 해결하기 위해 상황에 접근하는 좋은 방법은 무엇일까요?

P. 나는이 전체 메모리 프로파일 링에 익숙하지 않으므로 나에게 가볍게 가져 가라.).

+0

어떤 언어를 사용하고 있습니까? C#에서는 이벤트 처리기를 추가 할 때 "+ ="구문도 지원됩니다. –

+0

@Lawrence : AddHandler (AddHandler가 될 것으로 생각했다)와 Handles (핸들)에 대한 언급을 감안할 때 VB.NET 일 수만 있습니다. –

+0

VB.NET을 사용하고 있지만 ... EventHandler가 왜 그것을 피하기 위해 "재귀 적으로"계속 추가하는지 알 수 있습니다. – PedroC88

답변

1

처리기가 이벤트를 다시 트리거하는 경우에도 마찬가지입니다. 이것을 알려주는 가장 쉬운 방법은 핸들러에 중단 점을 설정하고 예기치 않게 핸들러에 다시 들어가는 지 확인하는 것입니다. 그렇다면 스택 추적을보고 이벤트를 다시 트리거하기 위해 수행중인 작업을 파악할 수 있습니다. 그것은 (예를 들어, Paint) 일시 정지에 의해 영향을받을 수있는 이벤트가 있다면

, 당신은뿐만 아니라 핸들러 내에서 Console에 작성하고 실행을 일시 중지하지 않고 스냅 샷을 얻을 수 Environment.StackTrace을 인쇄 할 수 있습니다.

+0

나는이 과정을 생각하고'Handles' 절을 포함하는 메서드의 서명에 중단 점을 설정했지만 결코 거기에 도달하지 못했다. 내가 디버깅하고있는 (즉, RAM을 소비하고있는) 동작의 경우 해당 메서드가 실행되지 않습니다. – PedroC88

+1

@ PedroC88 :이 경우 이벤트 처리기와 관련이 없습니다. 반복적으로 호출되는 함수 * 내에서 동일한 작업을 수행해야합니다. 이것이 명확하지 않으면 코드 샘플을 게시하십시오. –

+0

정말 코드를 게시 할 수는 없지만 (다른 사람들에게 이런 식으로 도움을주기는 어렵다는 것을 알고 있지만) 나는 당신이 제안한 것을 이해합니다. 어떤 메소드가 반복적으로 호출되는지 알고 있지만, 어떻게해야합니까? – PedroC88