2011-09-07 4 views
-2

우리 팀원이 ASP.NET 웹 응용 프로그램의 몇 페이지를 검토하고 일부 OnLoad 재정의를 page_load 이벤트로 변경했지만 base.OnLoad() 호출을 제거하지 않았습니다.page_load 이벤트에서 base.OnLoad()가 호출되면 무한 루프가 발생합니까?

이 :

Public void override OnLoad() 
{ 
    //stuff 
    base.OnLoad(); 
} 

이 사람 :

Public void Page_Load(object sender, EventArgs e) 
{ 
    //stuff 
    base.OnLoad(); 
} 

참고 : 구문 오류가있는 경우 내가 실제 소스 코드를 컴퓨터에 아닙니다, 죄송합니다.

라이브 서버에 코드를 푸시하면 IIS app_pool에 문제가있어서 45 분에서 1 시간마다 충돌이 발생했습니다. 우리는 여전히 이것이 문제라고 확신하지는 않지만 page_load 이벤트가 호출되는 곳이 궁금합니다. system.web.ui.page의 OnLoad 메소드에서 호출됩니까? 그렇다면 무한 루프를 일으켜 결국 메모리가 부족 해지고 app_pool이 손상되었다고 생각합니다.

문제의 원인이 될 수 있습니까? 나는 어떤 의견을 주셔서 감사합니다.

+2

무한 루프가있는 경우 페이지가 열리면 스택 오버플로가 발생하고 곧바로 알 수 있습니다. –

+0

나는 우리가 그것을 필요로하지 않았다는 것을 알고있다. 그만하면 앱 풀이 충돌 할 수 있는지 궁금합니다. – Chev

답변

3

base.OnLoad();으로 인해 Load 이벤트가 발생합니다. 그러면 페이지의 OnLoad 이벤트 처리기가 발생하고 OnLoad에 대한 호출이 다시 포함됩니다. 게시 한 코드가 실제로 잘못되었습니다.

MSDN의 ASP.NET Page Life Cycle Overview 문서는 페이지로드 및 기타 이벤트 작동 방법을 설명하기에 적합합니다.

0

무한 루프가 발생하지 않더라도 기본 가상 메서드를 재정의하는 것에서 이벤트를 처리하는 것으로 변경된 결정은 지적인 것입니다. 무한 루프에 대해 걱정하는 대신 재정의 할 것을 제안합니다. 그것이 당신을 걱정하게한다는 사실은 오버라이드가 더 나은 선택이라는 표시입니다.

읽기 항목 30 : 빌 와그너에 의해 효과적인 C#을에서 이벤트 처리기에 오버라이드 (override)를 선호.

관련 문제