2008-10-30 64 views
11

我正在開發一個C#程序,並且我有一個消耗太多CPU的函數。我想知道一種方法來通過代碼(而不是任何外部應用程序)來控制它,並限制CPU使用率。 例如,如果它使用90%的CPU使用率,使我的應用程序僅消耗20%,即使速度變慢。它必須自動完成並從應用程序內完成。 如果你提供一堂課,那會很棒。如何限制C#程序的CPU使用率?

+0

這聽起來像一個柺杖:攻擊症狀而不是問題。你爲什麼不發佈該方法試圖做什麼,並要求我們幫助優化該方法。 – 2008-10-30 18:35:37

+1

它可能是一個柺杖,但我可以想到這個想法的幾個應用程序,例如:一個CPU綁定的背景任務來緊縮數字,辦公室PC的分佈式計算環境中的一個節點,一個人工智能程序來監視和向我學習使用習慣。 – 2008-10-30 19:22:16

回答

16

我不知道你是否可以這樣做,但可以通過Priority屬性更改執行線程的線程優先級。你可以通過以下方式設置:

Thread.CurrentThread.Priority = ThreadPriority.Lowest; 

另外,我不認爲你真的想要限制它。如果機器處於閒置狀態,您希望它忙於處理任務,對吧? ThreadPriority可幫助將此信息傳遞給調度程序。

0

您可以通過調用循環內的Thread.Sleep(毫秒)來減慢循環。這將CPU交給調度器。

但是'消耗太多的CPU'讓我覺得你可能有更多的基本問題。這個線程是否輪詢並等待其他事情?如果是這樣,你應該考慮使用事件或其他基於內核的信號機制。

0

我想你需要查詢某種操作系統API來了解你有多少CPU正在使用,並從中進行節流決定(如Thread.Sleep)。