禁用混合模式应用程序的并发GC

时间:2011-10-23 07:13:22

标签: .net concurrency garbage-collection c++-cli mixed-mode

设置:我有一个非托管/本机Win32应用程序,我注入了我的代码。我的代码主要是托管的,用C ++ / CLI编写并编译为DLL。我的加载器/注入器修补了应用程序的crt0启动代码(基本上将调用交换到入口点函数,其中一个用于LoadLibrary)。在附加到主机进程时,DLL将几个组件DLL加载到内存中(注入的DLL本身是用非托管代码编写的,只有组件DLL是托管程序集)并修补各种内存位置以充当组件DLL的接口。

现在我的组件DLL中的代码似乎触发了内存泄漏[如Proper Object Disposal In C++/CLI中所述],我一直在寻找在.NET内存Profiler工具的帮助下调试它。不幸的是,我不寻常的环境妨碍了工具的充分利用。尝试将探查器附加到进程会导致它报告已为进程启用了并发GC,这会阻止它使用其内部API来跟踪引用等。

我试图创建一个配置文件来禁用该模式的GC,但似乎没有效果 - 探查器继续显示错误消息(我假设这是因为主机应用程序主要是原生的,因此在启动时不解析配置文件)。我也尝试修改machine.config文件,徒劳无功。

是否有其他方法强制禁用并发垃圾收集器?

1 个答案:

答案 0 :(得分:1)

修正:我通过使用CorBindToRuntimeEx()的相应标志强制GC的服务器模式。