我希望有人能帮忙!
我们有一个相当大的VB.Net MDI应用程序,它已经从VB6转换而来。当它第一次在没有打开MDIChild窗体的情况下运行时,它使用大约35000 K。随着越来越多的表单被打开(但不是关闭的),内存使用量(根据任务管理器( Task ))以大约4000 K的速度递增。(我知道T.M.只显示为应用程序分配的内存,而不是实际使用的内存。)
问题是,当分配的内存到达某个点(根据目标机器上可用内存的不同而有所不同)时,在关闭一个或多个打开的表单之前,不能打开更多的表单。可以打开的表单数量的“限制”似乎取决于机器的可用内存。
例如:-在整个机器只有512米的虚拟机上,它似乎是7-8个表单,当这种情况发生时,分配的内存大约为80000 K。-在我们的终端服务器机器上,它有3GB,并且正在运行各种其他需要使用的应用程序,它停留在20+窗体周围,内存分配大约为10万到105,000 K。
我试过使用perfmon来查看是否存在漏洞,这表明使用情况稳定。
但是,即使我关闭表单,分配的内存在第一个窗体关闭时也只会下降大约3000 K,然后在每个窗体关闭后再下降100 K。如果我再加几个表格,记忆就会增加,如果我关闭一些相同的-3000 K,-100 K的减少模式再次发生。
以前有人来过这里吗?任何一个人,请帮助,因为这是一个看上去有点像一个节目停止!我期待着你的答复。
顺便说一句,最初的VB6版本没有这个问题,如果关闭每个表单,也会将它的内存分配返回给它启动的内存分配,而不是分配逐渐增加,因为teh应用程序的释放比分配的要少。
编辑:--我刚刚在开发中获得了相同的错误。似乎在UserControl中抛出一个UserControl。错误是“创建窗口句柄错误”。
谢谢并致以良好的问候,杜安。
发布于 2010-07-08 14:11:05
您的应用程序只是在消耗Windows强加的句柄配额。默认情况下,它是10,000个句柄,尝试创建另一个窗口将失败,“创建窗口句柄错误”。
也许对于VM或TS安装来说,这些限制较低,但不确定。上限是相当大的,你不应该有任何困难,远离它。在任务管理器中,使用View + Select列并勾选用户对象、GDI对象和句柄。在没有绑定的情况下,这些列中的任何一列都是代码中错误的确定标志,比如不处理窗体或控件。消耗更多的内存是这次泄漏的副作用。
发布于 2010-07-12 16:36:49
结果是,在释放用户对象之前,我们需要显式地释放自定义UserControls中的每个单独的控件。
https://stackoverflow.com/questions/3203300
复制相似问题