簡體   English   中英

沒有明顯原因的Stackoverflow異常

[英]Stackoverflow exception with no noticeable reason

我有一個頁面可以進行測試,因此修復它並不是非常重要,但是我想知道是什么導致了此異常。 該頁面非常簡單。 我有一個名為MakeTheData的函數,添加數據點大約需要38,000行。 我在啟動頁面時注意到我遇到了堆棧溢出異常。

您可以在此處看到到達中斷點以調用該函數。 然后,我繼續....

在此處輸入圖片說明

現在,我得到一個堆棧溢出異常,而沒有碰到函數中的第一個斷點。 這怎么回事?

在此處輸入圖片說明

MakeTheData分為多個部分,或嘗試發布版本。 我認為.NET運行時正在嘗試在輸入函數時為38000個局部變量( DataPoint類型)分配空間,這會立即導致堆棧溢出。

更新:此外,正如@JonSkeet所說,一開始根本不做這么大的功能。 我仍然很好奇它是否由優化的版本修復。

發生StackOverflowException的原因可能有多種。 錯誤真正告訴您的是線程耗盡了堆棧空間來存儲局部變量。 碰巧的是,我們最熟悉的是經典的“永不停止的遞歸調用”。

您的DataPoint是不是一個結構? 可能會為每條“ new DataPoint”行分配一個局部變量,這意味着大小將為結構大小*38000。鑒於您不會自己擁有該線程的堆棧(ASP.NET的堆棧)請求管道將位於您的方法調用的頂部),您可能沒有多少空間了。

解決此問題的一種方法(可能是最簡單的方法)是將您的方法調用分成多個方法。 這樣,內存分配將保持較低,並避免堆棧溢出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM