如何对从 C# 应用程序中退出的指令进行采样

Posted

技术标签:

【中文标题】如何对从 C# 应用程序中退出的指令进行采样【英文标题】:how to sample instructions retired from C# application 【发布时间】:2010-10-15 12:41:13 【问题描述】:

我希望从 C# 应用程序的英特尔芯片中采样硬件事件“已停用的指令”或“已停用的独占指令”。

具体来说,我需要在函数调用的开始和结束时对这个数字进行采样,因此根据这篇文章在 Visual Studio 2010 中使用 cpu 计数器运行分析运行:

http://msdn.microsoft.com/en-us/library/bb385772.aspx

没有帮助。使用 CPU 计数器并运行采样配置文件,您可以获得整个应用程序停用的指令总数。我不能重新组装这个应用程序来只调用这个函数,所以我需要更具体地说明这个指令退役样本的“开始”和“结束”。

有人知道一些汇编指令会读取指令退役硬件事件吗?据推测,如果这可用,我可以以某种方式直接从我的 C# 方法的开头和结尾调用此汇编指令。

【问题讨论】:

How can i access the Intel CPU Counter的可能重复 【参考方案1】:

PAPI 是一个非常有前途的领导者,但是,我相信他们在几年前就停止了对 Windows(以及因此 .NET C#)的支持。

在 Windows 前端,Visual Studio 2010 Premium 带有性能资源管理器。如果您在检测模式下运行任何项目或二进制文件,则可以访问硬件事件,例如指令退役。

根据外部因素,结果可能有些混杂和不一致,但它与 Visual Studio 很好地集成,您可以获得每个方法/模块级别的详细计数(平均、最大值、总计)。

英特尔 V-tune 性能分析器也原生公开了这些。我还没有玩过这个工具,但它可能是比 Visual Studio 2010 公开的更灵活的 API。

【讨论】:

以上是关于如何对从 C# 应用程序中退出的指令进行采样的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用 VS2010 分析器对 C# 中的主线程以外的线程进行采样

如何正确退出 C# 应用程序?

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

C# WinForm 不抱错,自动退出的情况

如何在滚动到顶部同时添加侦听器时对从 Firestore 获取的聊天进行分页

如何在 C# 控制台应用程序中捕获 ctrl-c (SIGINT)