4

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

4

3 回答 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 回答