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