如何挂钩.NET内存管理器/垃圾收集器?

时间:2016-04-10 10:31:44

标签: c# .net memory-management memory-leaks garbage-collection

我正在寻找.NET内存泄漏检测工具和.NET分析器 - 在互联网上有很多,但是 - 它们都是商业工具。我想检查是否有任何开源替代品,他们的开发状态是什么(什么工作,什么不工作),以及是否可能 - 如果有人能够指出我用哪个API来“挂钩”。 NET垃圾收集器。

另外我已经明白参考分析是非平凡的 - 如果GC不收集内存 - 那么这意味着有人引用了这些数据 - 因此转而需要某种参考回溯 - 同样有趣的是什么API和技术存在分析参考文献。

我希望代码是低级别的 - 最好是C / C ++ - 我怀疑它与C ++ / COM未记录的API有关。但如果还有C#接口来执行内存分析 - 我也可以使用它们。

所以如果可能的话:

  • 你能在这里发布链接到开源代码项目/代码的链接,它们挂钩了.NET内存管理。
  • 您是否可以发布与挂钩内存管理相关的API文档的链接。

1 个答案:

答案 0 :(得分:0)

这是我迄今为止简要分析的内容 - 来自我自己的老问题 - Resolve managed and native stack trace - which API to use?

我已经跟踪并通过SOS / Strike链接,您可以在其中找到以下信息:

从这个git存储库: https://github.com/dotnet/coreclr/blob/master/src/ToolBox/SOS/Strike/sosdocs.txt

您可以找到关于windbg支持哪种命令的简要说明(例如DumpHeap),以及相应的实现:

https://github.com/dotnet/coreclr/blob/master/src/ToolBox/SOS/Strike/strike.cpp

但这更多的是windbg扩展 - 由于缺少项目而从未设法编译它,并且在问题出现之后它看起来像分析工具 - 我更愿意积极地连接到内存分配链。

我猜sos / strike的通讯代码不存在?