c# - 如何获取进程使用的CPU周期数

标签 c# vb.net performance process performancecounter

我需要使用 C#(或 VB.Net)获取特定进程使用的 CPU 周期数。此信息在 Sysinternal 的 Process Explorer 中的 Process properties 弹出窗口中可用。例如,我在发布此消息时使用的浏览器目前使用了 18,521,360,165 个周期(大约几亿)。有谁知道如何从 .Net 应用程序获取此信息?我知道如何获取 CPU 使用率(百分比),但这不是我要找的。我需要一种方法来比较在不同时间运行的两个不同进程之间的 CPU 使用率。

谢谢, 马特

更新:
为什么我需要这个?我是本地 .Net 用户组的负责人,我们正在举办代码挑战赛,开发人员提交代码来解决问题。我需要一种方法来衡量一个条目相对于另一个条目的性能。目前我正在使用计时器来衡量性能。服务器 100% 专用于此,但这并不能保证可能同时发生其他事情。显然,这充满了各种潜在问题,但总的来说,它是相当准确的。测量使用的 CPU 周期数将是一种几乎是万无一失的方法来衡量某人的条目相对于另一个条目的执行情况。我敢肯定,有人可以解决这个问题——此时无需尝试。 ;-) 我希望这有助于解释我的问题背后的原因,以及为什么计时器不足以解决我的问题。

最佳答案

Process Explorer 调用 QueryProcessCycleTime获取该信息。您可能必须使用 P/Invoke 来调用它。我希望它的 P/Invoke 签名看起来像:

[DllImport("kernel32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool QueryProcessCycleTime(IntPtr ProcessHandle, out ulong CycleTime);

关于c# - 如何获取进程使用的CPU周期数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6526828/

相关文章:

c# - C# 报告 "Object reference not set to an instance of an object."中的 LINQ DataContext.SubmitChanges()

c# - 具有分层数据模板和多种类型的 WPF TreeView

c# - 在 iTextSharp 中以从右到左(双向)语言反转字符串

asp.net - VB.NET - 将 WinForm 应用程序导出/转换为 Web ASP.NET 应用程序的最简单方法

java - 从 String-Json 对象中获取值

c++ - 如果不使用,双端队列会减慢程序速度吗?

c# - 检查类型而不是 null 是一个合理的选择吗?

vb.net - 在vb中禁用回车键选择按钮

mysql - 如何填充 datagridview VB.Net

c++ - 为什么随机额外代码可以提高性能?