如何在面板中解决此System.ComponentModel.Win32Exception?

时间:2014-12-02 03:25:35

标签: c#

我有一个加载257用户控件的面板。当它达到191时,它将返回System.ComponentModel.Win32Exception。

我已经有很多关于解决异常的文章了。我在for循环中使用了GC.Collect()来释放内存,因为每次执行循环时,内存消耗都会增加。我也试过。在循环之前和之后暂停,但没有一个工作。

我的代码是用C#编写的。

一个用户控件加载36个控件和加载191个以上用户控件所需的程序。

1 个答案:

答案 0 :(得分:0)

您是否运行Process Explorer或Windows任务管理器来查看 GDI对象,句柄,线程和USER对象?如果没有,请选择要查看的列(任务管理器选择查看 - >选择列...然后运行您的应用并查看该应用的那些列,看看其中一列是否真的变大了。

应用程序的Windows句柄限制是10,000个句柄。 可能是您已经拥有了您认为已清理但尚未处置的UI组件

可能你的程序创建了太多句柄。 您需要使用内存配置文件来查找内存泄漏。我使用ANTS Memory Profiler。此外,如果您在表单关闭之前从表单中删除它们,请确保在控件上调用Dispose方法(否则控件将无法处置)。您还必须确保没有向控件注册事件。