我们有一个调用 .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 构建引起的。
链接:
关于.net - VB6 应用程序调用 .NET DLL OutOfMemory 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1723797/