如何从 .NET 应用程序收集探查器数据

Posted

技术标签:

【中文标题】如何从 .NET 应用程序收集探查器数据【英文标题】:How to collect profiler data from .NET app 【发布时间】:2013-01-29 16:20:56 【问题描述】:

我有一个 Windows 服务,它定期将 .NET 控制台应用程序作为外部进程启动。

我想在服务运行时从那些外部启动的进程中收集分析数据 (CPU) 并稍后对其进行分析 - 这可能吗?

【问题讨论】:

【参考方案1】:

是的,这是可能的。一种选择是使用PerfView 来收集系统跟踪。我假设您控制启动控制台应用程序,因此您可以修改启动以在启动时捕获跟踪。

您可以配置 PerfView 以捕获各种详细信息,以帮助您排除正在发生的事情。如果您尚未将 ETW 添加到您的应用程序中,我建议您也使用take a look at that,因为它可以帮助您放大您的应用程序正在做什么以及需要多长时间。

【讨论】:

谢谢,看起来很有希望。我几乎没有 .NET 经验 - 我是否需要在外部进程的代码中添加任何内容以使它们发出 ETW 日志,以便 PerfView 可以分析它们?我真的只对方法调用时间感兴趣。 PerfView 可以对调用堆栈进行采样,因此您无需添加任何内容。但是,添加 ETW 事件将使您更容易识别应用程序的哪个部分在任何给定点运行(无需查看调用堆栈)。 好的,谢谢!当我发现它有效时会将答案标记为正确。

以上是关于如何从 .NET 应用程序收集探查器数据的主要内容,如果未能解决你的问题,请参考以下文章

.NET 可附加探查器

WPF 性能套件可视化探查器不起作用

如何检测探查器正在运行?

实体框架探查器 - 带有 EF 6 的 ASP.NET MVC4 - 无法确定提供程序名称

探查器是不是会错过花在被阻止呼叫上的时间?

探查器如何对正在运行的程序进行采样?