查看某個進程和線程的cpu使用率

來源:互聯網
上載者:User

在實際開發中發現有時自己開發的程式使用率非常的高, 以致於影響到機器上其他程式的正常運行. 這時我們該怎麼辦呢?

 

首先應該想到的, 也是最佳解決方案是找到進程中使用cpu最多的那個線程( 怎樣找到cpu使用最多的線程, 暫不在這裡討論 ), 然後進行最佳化它. 當然還有另外一種就是限制程式的cpu使用率的峰值. 當進程的使用率達到限定的峰值時, 就讓他睡眠 sleep( 0 ), 或者WaitForSingleObject. 注意這裡提到的進程的cpu使用率其實進程中所有線程的cpu使用率的總和. 從這個意義上來說的話,其實限制某個進程的cpu使用率就是限制進程中線程的cpu使用率.

 

那麼我們怎麼得到線程的cpu的使用率呢?

可以使用系統提供的下列兩個函數:

GetThreadTimes 和 GetProcessTimes . 這2個函數的詳細資料可以參看msdn. 函數的最後2個參數返回的是進程/線程在核心模式和使用者態模式啟動並執行時間. 我們可以一定的時間間隔擷取此2值和之前的擷取的此2值做差值, 就得到線程/進程在該時間間隔內的運行在cpu上的時間, 用這個時間除以時間間隔就得到對應的cpu的使用率, 如已耗用時間是10ms, 時間間隔為1000ms, 那麼cpu使用率就是1%了.

 

如果我們只是查看線程/進程的cpu使用率, 上述時間間隔可以大一些, 如可以是1秒以上, 如果是要控制其使用率則要儘可能的小一些, 否則等你下次監測的時候已經超過很多時間或者超出設定的峰值太多了.但是這個值到底是多長合適, 這個需要寫具體的測試程式去測試.

 

 

以上描述的是怎麼樣擷取進程和線程的, 也許有時需要整個系統的cpu使用率, 這個時候可以採用GetSystemTimes, 有了這個函數, 剩下的工作就和上面描述的一樣.

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.