【问题标题】:Implementing line-level profiling实施行级分析
【发布时间】:2013-07-16 10:23:03
【问题描述】:

上周左右我一直在使用 CLR Profiling API,作为夏季的宠物项目。

我开始思考 ANTS 和 DotTrace 如何实现行级分析。我在 Profiling API 中看不到任何与此相关的内容,所以我认为他们有一些专有的东西。

我正在寻找有关他们如何实现这一点的指针或想法。

当代码被 JIT'ed 时,他们会注入 MSIL 代码吗?

【问题讨论】:

  • 如果你这样做的原因是想办法加速代码(位置精度比时间精度更重要),我依赖的方法是this
  • 我实际上已经看到了这个答案,这是有道理的。我这样做不是因为我想加快一些特定的代码,只是因为我很好奇:)
  • 有两种方法,检测和堆栈采样。检测涉及将调用插入代码中,因此具有侵入性且成本高昂。堆栈采样(如Zoom)是非侵入性的,并提供线路级成本。我不确定是否有任何.net。如果没有,应该有。

标签: c# c++ .net profiling clr


【解决方案1】:

开箱即用的 CLR 分析 API 支持仅在进入和离开级别进行跟踪。这可以使用ICorProfilerInfo::SetEnterLeaveFunctionHooks来完成

为了进行更精细的跟踪,需要对 IL 进行编织。您可以使用这些开源分析器代码作为参考:

JITCompilationStarted 回调期间的两个编织代码。

【讨论】:

  • 感谢您的回复。是的,我的输入、离开和尾调用回调工作得很好。将仔细查看您提到的项目,仅简要查看了其中一个的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-13
  • 1970-01-01
  • 1970-01-01
  • 2021-10-18
  • 2012-11-06
  • 2023-03-17
相关资源
最近更新 更多