我們的C#.NET應用程序遇到「OutOfMemoryException」。它們出現在隨機函數調用中,通常需要繪製圖像(System.Drawing.Image.get_RawFormat)或需要創建線程(System.Threading.Thread.StartInternal)。神祕的「Section Handle」內存泄漏(C#.NET/WinForms)
不用說,我無法重現我的開發機器上的崩潰。我獲得了崩潰應用程序的堆快照,並使用Process Explorer查看了另一個崩潰的實例。
例如,在一個實例中,有380M堆RAM(看起來OK),7758個句柄(看起來相當高),2245個USER-和1798個GDI對象)。
使用漂亮的軟件「Process Hacker」,我能夠獲得「句柄類型直方圖」。這顯示了4181個「Section」句柄,2834個「Event」句柄和420個「Thread」句柄。 「部分」處理數量遠遠高於我在開發機器上找到的數量。
我回顧了「What can cause section handle leaks?」的問題,但不幸的是答案並沒有幫助我。我們不使用內存映射文件或IPC(至少不是直接),並且我們不使用本文中提到的函數。
我試圖記憶配置文件的應用程序,但沒有發現任何明顯或重大的內存泄漏。我在運行GC並打印內存信息/處理計數的應用程序中添加了一個鉤子,但即使在生產環境中,使用此熱鍵我也無法重現泄漏。
我們使用的第三方軟件可能會導致一些問題(DevExpress控件和其他組件)。
此刻,我很無助,想問你的意見。我可以查看或檢查什麼?我如何着手追蹤問題?謝謝你的幫助!
我知道在這裏問可能已經太遲了,但是在這方面有什麼進展?我的問題和你的一樣。 – Shawn