我有一个加载257用户控件的面板。当它达到191时,它将返回System.ComponentModel.Win32Exception。
我已经有很多关于解决异常的文章了。我在for循环中使用了GC.Collect()来释放内存,因为每次执行循环时,内存消耗都会增加。我也试过。在循环之前和之后暂停,但没有一个工作。
我的代码是用C#编写的。
一个用户控件加载36个控件和加载191个以上用户控件所需的程序。
答案 0 :(得分:0)
您是否运行Process Explorer或Windows任务管理器来查看 GDI对象,句柄,线程和USER对象?如果没有,请选择要查看的列(任务管理器选择查看 - >选择列...然后运行您的应用并查看该应用的那些列,看看其中一列是否真的变大了。
应用程序的Windows句柄限制是10,000个句柄。 可能是您已经拥有了您认为已清理但尚未处置的UI组件。
可能你的程序创建了太多句柄。 您需要使用内存配置文件来查找内存泄漏。我使用ANTS Memory Profiler。此外,如果您在表单关闭之前从表单中删除它们,请确保在控件上调用Dispose方法(否则控件将无法处置)。您还必须确保没有向控件注册事件。