2014-12-02 48 views
0

我有一個面板,加載257用戶控件。當它達到191時,它將返回System.ComponentModel.Win32Exception。如何在面板中解決此System.ComponentModel.Win32Exception?

我已經紅了很多文章已經關於解決例外。我在for循環內部和之後使用了GC.Collect()來釋放內存,因爲每次循環執行時,內存消耗都會增加。我也試過。在循環之前和之後部署,但沒有一個能夠工作。

我的代碼是用C#編寫的。

一個用戶控件加載36個控件,並且程序需要加載超過191個用戶控件。

回答

0

您是否運行Process Explorer或Windows任務管理器來查看GDI對象,句柄,線程和USER對象?如果沒有,請選擇要查看的列(任務管理器選擇查看 - >選擇列...然後運行您的應用程序,並查看該應用程序的列,看看其中的一個是否真的變得很大。一個應用程序的窗口句柄限制爲10,000個句柄。這可能是你有,你認爲是清理,但尚未處理完畢 UI組件。

也許你的程序是創建過多的句柄。您需要使用內存配置文件找到內存泄漏r我使用了ANTS Memory Profiler,並且確保在控件上調用Dispose方法,如果在窗體關閉之前將它們從窗體中移除(其他明智的控制不會處置)。您還必須確保沒有向控件註冊事件。