【问题标题】:Is is possible to use Profiling API right from C#?是否可以直接从 C# 使用 Profiling API?
【发布时间】:2011-08-09 20:38:37
【问题描述】:

我只想使用 .NET Profiling API(ICorProfilerCallback 等)但同时不想处理 C++。我已经环顾了一段时间,但没有找到 C# 中的任何示例,但 C# + C++ 中最有趣的部分是使用 C++ 编写的。

【问题讨论】:

  • 您想查找瓶颈或内存泄漏?如果是前者,你应该知道this technique。它很有效,不需要 API,只需要一个调试器。
  • C++ 有什么问题?你的方案是什么?

标签: c# .net api profiling clr-profiling-api


【解决方案1】:

不,您不能在托管代码(C# 或其他)中实现 CLR 分析 API,因为当假定托管环境处于某种状态时,分析回调在非常特定的时间被调用。在托管代码中实现回调会违反很多假设。

CLR 分析 API 的开发人员 David Broman 拥有this to say

您需要在 C++。探查器由 运行时在非常微妙的点 执行已分析的应用程序, 而且经常是极其不安全的 在这些点运行托管代码。

David's blog 是处理 CLR 分析 API 的绝佳资源。

【讨论】:

  • @KarelFrajták,你是说 Pex 算作非托管代码并且可以访问 COM API,还是这个链接与这个问题完全无关?
  • 我认为有关于在 C# 中实现分析器方法的信息(它不再存在)。但是请参阅jasonbock.net/News/Item/741d5181-6a06-4e7f-8a00-e03660dd16cf - 引用:“Pex 也很有趣,因为它使用的技术和框架可以执行各种高级、酷的东西。特别是一个叫做 ExtendedReflection。这基本上是一个托管分析器 - 是的,你没看错。很长一段时间以来,我的印象是你不能在 .NET 中用托管代码编写探查器,但我错了,因为 ExtendedReflection 就是这样做的。”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-15
  • 1970-01-01
  • 1970-01-01
  • 2012-01-19
  • 1970-01-01
  • 2011-11-27
  • 2011-06-03
相关资源
最近更新 更多