我們發現我們的一個自動生成的程序集在new()上拋出StackOverflowException。這個類有(請隨我)400個簡單的屬性被初始化(大部分是默認的(字符串)等)在構造函數中。如何更改託管executable.net的默認堆棧大小
我們注意到它在64位上很好,但是在32位上它很棒!
我們需要測試我們的用例是否合理,以創建一個更大的默認堆棧,以便在重新構造代碼生成器時爲我們提供呼吸空間。
我們會特別的。如果可能的話,對涉及app.config的解決方案感興趣。但我是一個現實主義者,所以一切都會很好。
堆棧溢出的重要原因。我們已經縮小了相關構造函數的錯誤。我的第一印象也是無限遞歸的類型。然而,我們使用3線控制檯應用程序再現了錯誤:
- 創建類的空實例。
- 在第一份工作要創建的類上調用一個非靜態方法(克隆),並且清空實例已準備好將這些屬性傳入。
它碰到第二個構造函數時會發生爆炸。
現在使用.net源代碼進行調試時,我們看到堆棧溢出位於Guid.NewGuid()中,它作爲第二個參數傳遞給構造函數。實際的代碼行是對本地CoCreateGuid()調用的調用。
所以,雖然它可能是CoCreateGuid()中的一個錯誤,但我們希望從問題中消除我們的代碼。我的第一個想法是大量增加堆棧的大小,並查看是否再次出現此錯誤。然後,因爲我認爲我們可以控制所有用例,所以用對象初始化替換構造函數 - 認爲這可以減輕堆棧上的壓力。
Nb。我們可以通過從類中刪除int屬性來阻止錯誤發生。
好的,所以我投了票,沒有看到在http://stackoverflow.com/questions/1042347/how-do-you-change-default-stack-size-for-managed-executable上的建議重複。對於那個很抱歉。既然這一個實際上已經得到了回答,而另一個則沒有,我認爲我們應該讓這個開放並關閉另一個。 – 2009-06-25 05:58:41
哎呀複製是一個瀏覽器口吃的情況下真正點擊回想我想添加更多的信息 - 但顯然它張貼。 – 2009-06-25 09:32:15