2012-09-14 36 views
4

我想知道,如果它可以檢測並執行一些動作每一個我的代碼檢測到CPU上下文切換已經發生(相對於計數許多上下文切換是如何發生的一段時間)時間。無論如何,要做到這一點,例如,C#?程序檢測上下文切換

+1

那不是要求你的程序在一個專用的核心全面運行-時間?我不確定這甚至是可能的。 (如果不是程序啓動CPU,它將如何「響應」上下文切換事件) –

回答

6

不,這不可能在C#中的事。因爲C#是一種在用戶模式下運行代碼的託管語言。上下文切換源自內核模式,用戶級別代碼無法訪問。

這可能是可以具有C驅動器,然而,代碼可能會嚴重損壞OS性能和穩定性。

1

上下文切換是非常低的水平核活動因此不大可能(我不知道是肯定的),這樣的掛鉤存在。

你肯定將無法在正常的.Net運行時至少運行代碼來做到這一點,因爲它不會讓一個完全控制線程和內核模式不運行。

現在如果問題是「我可以在C#中編寫內核代碼」而不是 - 是*(* - 我不相信有可用於編譯器的C#將生成可在內核級別執行的本機代碼 - 寫你自己)。

0

我認爲這可能是有用的信息,它是possible with pure C用的getrusage()

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

但我不知道C#