【问题标题】:Programmatically Detect Context Switches以编程方式检测上下文切换
【发布时间】:2012-09-14 16:01:03
【问题描述】:

我想知道是否可以在我的代码每次检测到发生 CPU 上下文切换时检测并执行一些操作(而不是计算在特定时间段内发生了多少次上下文切换)。无论如何要在 C# 中执行此操作?

【问题讨论】:

  • 那不需要你的程序在一个专用的内核中全职运行吗?我不确定这是否可能。 (如果不是您的程序打开 CPU,它将如何对上下文切换事件“做出反应”)

标签: c# cpu


【解决方案1】:

不,这在 C# 中是不可能的。因为 C# 是一种在用户模式下运行代码的托管语言。上下文切换源自内核模式,用户级代码无法访问该模式。

这可能通过 C 驱动程序实现,但是,代码可能会严重损害操作系统的性能和稳定性。

【讨论】:

    【解决方案2】:

    上下文切换是非常低级的内核活动,因此(我不确定)这种钩子不太可能存在。

    你肯定不能用在正常的.Net运行时运行的代码来做到这一点,至少因为它不允许完全控制线程并且不在内核模式下运行。

    现在,如果问题是“我可以在 C# 中编写内核代码”,那么 - 是*(*- 我不相信有可用的 C# 编译器可以生成可以在内核级别执行的本机代码 - 编写你的自己)。

    【讨论】:

      【解决方案3】:

      我认为 possible with pure C 和 getrusage() 可能是有用的信息

      struct rusage {
       ...
          long   ru_nvcsw;         /* voluntary context switches */
          long   ru_nivcsw;        /* involuntary context switches */
      };
      

      但我不懂 C#

      【讨论】:

        猜你喜欢
        • 2011-11-06
        • 1970-01-01
        • 2012-02-01
        • 2019-05-07
        • 1970-01-01
        • 1970-01-01
        • 2015-05-09
        • 1970-01-01
        • 2011-10-05
        相关资源
        最近更新 更多