.net - VB6 应用程序调用 .NET DLL OutOfMemory 异常

标签 .net dll vb6 out-of-memory

我们有一个调用 .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 构建引起的。

My Google Search

链接:

WeakReferences in Debug Build

关于.net - VB6 应用程序调用 .NET DLL OutOfMemory 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1723797/

相关文章:

C# 等价于 VB 字符串大于

.net - 使用 LINQ 计算文本字段中的单词出现次数

c# - if else 语句和 while 循环

vba - 注册 scrrun.dll 后 Scripting.FileSystem 对象上的运行时错误 429

VB6:如何从日期类型中删除时间部分

c# - 如何在 C# 的 getter 和 setter 方法中进行验证?

.net - 为什么 "Non"中的 "ExecuteNonQuery"?

c# - 如何让Serilog从appsettings.json登录到web输出目录?

c++ - 以下哪种方法可以安全地导出到 C++ dll 中?

visual-c++ - Loadlibrary 无法加载 dll