在远程 CLR 进程中强制垃圾回收

本文关键字:CLR 进程 | 更新日期: 2023-09-27 18:34:37

我有一个简单的基于 CLRMD 库的自定义内存分析器。它工作正常,一切。但是我必须始终从目标应用程序内部手动强制GC,以便获得准确的对象计数。有没有一种简单的方法可以从另一个进程触发计算机上 CLR 进程的 GC?我的第一个想法是使用某种远程处理来告诉目标进程执行 GC。但这需要修改目标,这不是一个好主意。

在远程 CLR 进程中强制垃圾回收

如果目标应用程序是你的,则可以使用自定义 CLR 主机运行它,实现 ICLRGCManager ,并从托管代码的"外部"调用其Collect方法。

您仍然需要某种遥控器或触发器来执行此操作,但是您可以导出 C 样式的过程来调用它,并从探查器中GetProcAddress它,完全绕过托管控件(我从未在 C# 中尝试过,只是在 Delphi 中,但它应该可以工作(。

请参阅 http://community.bartdesmet.net/blogs/bart/archive/2005/07/24/2984.aspx 以获取一些美丽的解释(向Bart De Smet致敬(。