我们有一个调用 .NET DLL 的 VB6 应用程序。有时,在 VB6 应用程序运行很长时间并多次调用 .NET 代码后,.NET 方面会抛出 OutOfMemory 异常,即使计算机上有足够的可用内存。 VB6 的内存空间也远未达到极限。
.NET 端是否保留单独的内存池?或者它是 VB6 应用程序内存池的一部分吗?
如果是分开的,有没有办法看出它有多大?我的任务管理器中唯一占用大量内存的项目是 SQL Server 和 VB6 应用程序(都是预期的)。
这种情况并不经常发生,但一旦发生,就很难确定为什么系统不分配更多内存。
答案最终非常简单:
使用 DEBUG 配置构建的 .NET DLL 在运行时会发生泄漏。
切换到 RELEASE 版本解决了我的问题。
背景:
我终于让 ANTS 调试 VB6 应用程序并查看 .NET 进程(必须更改 VB6 代码以尽快加载 .NET 代码)。完成此操作后,我看到大量弱引用对象,其父对象是 __ENCList。此类允许在调试期间进行编辑并继续。快速的 Google 搜索立即显示这是由使用 DEBUG 构建引起的。
我的谷歌搜索 http://www.google.com/search?q=__ENCList
Links:
调试构建中的弱引用 http://social.msdn.microsoft.com/Forums/en-US/clr/thread/b83106bd-8afe-4291-8620-f173e214cd23
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)