我希望有人可以提供帮助!
我们有一个相当大的 VB.Net MDI 应用程序,它是从 VB6 转换而来的。当它第一次在没有打开 MDIChild 表单的情况下运行时,它使用了大约 35,000K。随着越来越多的表单打开(但未关闭),内存使用量(根据任务管理器)以每个表单大约 4,000K 的速度攀升。(我知道 TM 只显示为应用程序分配的内存,而不是实际使用的内存。)
问题是,当分配的内存达到某个点时,这取决于目标机器上的可用内存,在一个或多个打开的表单关闭之前,无法打开更多表单。可以打开的表单数量的“限制”似乎取决于机器的可用内存。
例如: - 在整个机器只有 512M 的虚拟机上,它似乎是大约 7-8 个表格,当这种情况发生时,分配的内存大约是 80,000K。- 在我们的终端服务器机器上,它有 3GB 并且还运行各种其他口渴的应用程序,它停止在大约 20 多个表单和大约 100,000 - 105,000K 的内存分配。
我尝试使用 perfmon 来查看是否存在泄漏,这表明使用稳定。
但是,即使我关闭表单,分配的内存也只会下降大约 3000K,第一个表单关闭,然后每个表单关闭 100K。如果我再添加一些表格,内存会增加,如果我关闭一些相同的 -3000K,-100K 内存减少模式再次发生。
有没有人遇到过这个?任何人都可以帮忙,因为这看起来有点像一场表演赛!我期待着您的回复。
顺便说一句,原始的 VB6 版本没有这个问题,并且如果您关闭每个表单,它的内存分配也会返回到它开始的位置,而不是因为应用程序释放的数量少于分配的数量,分配会逐渐增加。
编辑:我刚刚在开发中遇到了同样的错误。似乎在 UserControl 中引发了 WIN32Exception。错误是“创建窗口句柄时出错”。
谢谢和亲切的问候,杜安。