2013-07-15 31 views
3

我有一個用C#和.Net v4開發的ASP.NET web應用程序。當您登錄並離開頁面大約15-20分鐘時,我收到「堆棧不足以繼續安全地執行程序。」System.Web.UI.Control.LoadRecursive() - 堆棧不足以繼續安全地執行程序。

」 「 」

「據我所知,您無法嘗試捕獲.Net中的stackoverflow。我會想象,遞歸加載網頁和活動會話檢查導致這個錯誤(也許是一個不好的編碼習慣)。我還添加了屏幕截圖,因爲我可以從堆棧跟蹤中找出它。如果有人幫助我,這將有所幫助。

Screen Shot

+0

它試圖找到什麼控制?我會想象你有一個'while','for'或者'foreach'循環,直到遇到這個循環纔會結束並運行。 –

+0

這不會引起堆棧溢出。它使用['RuntimeHelpers.EnsureSufficentExecutionStack'](http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.runtimehelpers.ensuresufficientexecutionstack.aspx),它引發'InsufficientExecutionStackException',* not * a 'StackOverflowException'。這個例外可以被捕獲。這是測試,以確保有足夠的堆棧執行操作,而不會實際用完堆棧。但是,捕獲此異常可能不會有幫助,因爲可能沒有有效的方法來處理它。 – vcsjones

+0

可能發生的情況是'LoadRecursive',一個框架方法,正在使用它來確保正確的堆棧空間。它失敗*可能*因爲你有非常非常嵌套的ASP.NET控件。 – vcsjones

回答

1

我想我找到了解決方案。仍然是測試。檢查this鏈接和this 他們真的看起來很有希望。我會讓你們在我成功時更新..

謝謝大家的幫助。

0

問題是這樣的調用堆棧是正確的在棧的末端。

有幾件事情來尋找:

  1. 有沒有在你的代碼的任何地方使用的是.FindControl(string id)
  2. 如果是這樣,它是定位一個控件,然後試圖進一步找到它?
  3. 是否動態創建控件,如<asp:Placeholder/>控件。

當您從嵌套控件中引用父代時,它可以是遞歸的,然後由父代重新引用。