2011-09-07 27 views
-2

我的團隊成員在ASP.NET Web應用程序中瀏覽了幾頁,並將一些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#不想覆蓋到事件處理程序

相關問題