以编程方式检测上下文切换

时间:2012-09-14 16:01:03

标签: c# cpu

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

3 个答案:

答案 0 :(得分:6)

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

这可能适用于C驱动程序,但是,代码可能严重损害操作系统性能和稳定性。

答案 1 :(得分:1)

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

对于在正常.Net运行时运行的代码,你肯定无法做到这一点,至少因为它不会让一个人完全控制线程并且不能在内核模式下运行。

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

答案 2 :(得分:0)

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

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

但我不了解C#