我想知道是否可以在每次我的代码检测到发生 CPU 上下文切换时检测并执行一些操作(而不是计算在特定时间段内发生了多少次上下文切换)。无论如何要在 C# 中执行此操作?
问问题
523 次
3 回答
6
不,这在 C# 中是不可能的。因为 C# 是一种在用户模式下运行代码的托管语言。上下文切换源自用户级代码无法访问的内核模式。
这可能使用 C 驱动程序,但是,代码可能会严重损害操作系统的性能和稳定性。
于 2012-09-14T16:08:05.100 回答
1
上下文切换是非常低级的内核活动,因此(我不确定)这种钩子不太可能存在。
您肯定无法使用在正常 .Net 运行时运行的代码来做到这一点,至少因为它不会让您完全控制线程并且不会在内核模式下运行。
现在,如果问题是“我可以在 C# 中编写内核代码”而不是 - 是*(*- 我不相信有可用的 C# 编译器可以生成可以在内核级别执行的本机代码 - 编写你自己的)。
于 2012-09-14T16:08:57.600 回答
0
我认为使用带有 getrusage()的纯 C可能是有用的信息
struct rusage {
...
long ru_nvcsw; /* voluntary context switches */
long ru_nivcsw; /* involuntary context switches */
};
但我不知道 C#
于 2014-09-20T01:18:47.970 回答