簡體   English   中英

C# HashSet 偶爾但可重復地生成 System.OutOfMemoryException

[英]C# HashSet generating System.OutOfMemoryException sporadically but reproducibly

所以我們有兩個項目 - 一個核心項目,我們可以調用 MainProject,它有一個名為LoadData()的函數,它一次將 33,751,107 個字符串文本記錄加載到一個HashSet ,以及一個單元測試項目,我們可以調用它運行一個單元的 TestProject針對LoadData測試(它引用 MainProject)。

如果我們在 TestProject 中運行單元測試,它會通過並成功加載所有 33,751,107 條記錄,沒有錯誤。

但是,如果我們在 MainProject 啟動期間運行 LoadData() 函數,它會因以下異常而崩潰:

System.OutOfMemoryException:拋出了“System.OutOfMemoryException”類型的異常。

有趣的是,它在成功加載 23,986,243 條記錄后崩潰,然后嘗試加載下一批。

這很奇怪。 如何才能LoadData在MainProject功能崩潰(這是一個ASP.NET 4.6.1 web項目),並在TestProject(這是.NET框架4.7.2單元測試項目,使用MSTest的框架),它們只是運行在同一不會崩潰LoadData功能?

我什至嘗試將 MainProject 升級到 ASP.NET 4.7.2(沒有效果,仍然崩潰)。 MainProject 的 web.config 或 TestProject 的 app.config 中沒有什么特別之處。 我嘗試將其添加到 web.config:

<gcAllowVeryLargeObjects enabled="true"/>

這並沒有改變或解決問題。 這種行為不是隨機的,也不是間歇性的——它每次都會重復發生。 我沒有想法了。

有誰知道為什么會發生這種情況?

任何幫助將不勝感激。

更新:我嘗試創建一個 SuperHashSet 類,該類創建多個 HashSet 的集合,每個集合的最大項目數為 10,000,000 個項目。 即使它使用~3+ HashSets而不是一個大的HashSets,它也會在完全相同的點上以相同的錯誤死亡。 有任何想法嗎?

感謝@GiddyaNaya 的回答 - 問題是該項目沒有構建為 x64。 完成所有配置設置后,我發現在 2 個級別的深處仍將其設置為 Any CPU。 再次感謝您對此的幫助。

暫無
暫無

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

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