在远程 CLR 进程中强制进行垃圾回收
Posted
技术标签:
【中文标题】在远程 CLR 进程中强制进行垃圾回收【英文标题】:Force garbage collection in remote CLR process 【发布时间】:2016-02-15 16:13:39 【问题描述】:我有一个基于 CLRMD 库的简单自定义内存分析器。它工作正常。但是我必须始终从目标应用程序内部手动强制 GC 以获得准确的对象计数。有没有一种简单的方法可以从另一个进程触发我机器上的 CLR 进程的 GC? 我的第一个想法是使用某种远程处理来告诉目标进程执行 GC。但这需要修改目标,这不是一个好主意。
【问题讨论】:
我不知道为什么这被否决了。商业内存分析器在拍摄快照之前运行强制 GC,但如何?我也在寻找解决方案。如果你找到了请发帖。谢谢。 【参考方案1】:如果目标应用程序是您的,您可以使用自定义 CLR 主机运行它,实现 ICLRGCManager
,并从托管代码的“外部”调用其 Collect
方法。
您仍然需要某种遥控器或触发器来执行此操作,
但是你可以导出一个 C 风格的过程来调用它,并从你的分析器中导出 GetProcAddress
,完全绕过托管控制(我从未在 C# 中尝试过,只是在 Delphi 中,但它应该可以工作) .
请参阅http://community.bartdesmet.net/blogs/bart/archive/2005/07/24/2984.aspx 了解一些漂亮的解释(感谢 Bart De Smet)。
【讨论】:
以上是关于在远程 CLR 进程中强制进行垃圾回收的主要内容,如果未能解决你的问题,请参考以下文章