簡體   English   中英

更改線程優先級以使我的程序和計算機更具響應性

[英]Changing thread priority to make my program and computer more responsive

我編寫了一個.NET winforms應用程序,它使用輔助線程進行一些繁重的處理,將其進程傳回UI線程。 一切正常,表單顯示進度,我還創建了一個取消按鈕來中斷處理線程。 但是,當耗時的過程進入應用程序時,我的整個計算機都會慢下來。 拖動窗口需要很長時間,並且在嘗試在記事本中鍵入字母時甚至會有明顯的延遲。

我假設我需要降低處理線程的優先級,和/或增加UI線程的優先級。 這是正確的嗎? 現在兩個線程都是普通優先級。

這跟下面一樣容易嗎? 或者我還應該做些什么呢?

Thread.CurrentThread.Priority = ThreadPriority.AboveNormal;

我該如何改變優先順序? 我應該降低處理的優先級,還是提高UI的優先級,或兩者兼而有之? 到了什么環境? 高於正常還是最高?

我不一定認為線程優先級是你的問題(雖然它可能是它的一部分)。 看看這個SO問題: 后台工作者線程優先級

在后台線程中可能過於緊密的循環會在該線程上保持cpu時間。 有幾種方法可以將它從殘酷的(線程睡眠)修復到更合理的(互斥和事件)。

您還可以嘗試分析后台線程(直接或在測試工具中)以查看它花費大部分時間的位置,並嘗試使用異步事件或類似的卸載技術來隔離它。

如果您希望后台線程不會影響整個系統的響應速度,您需要降低它的優先級,最有可能的是將其設置為BelowNormal的優先級。

否則,它將具有您目前看到的相同效果。

話雖這么說,我會在我自己的代碼中猶豫不決。 如果您的程序在具有更多處理核心的系統上運行,這可能不是問題,並且降低線程優先級(可能)將導致您的算法需要更長的時間來處理。

您通常希望單獨保留主線程的優先級,並將處理線程的優先級降低到空閑。

通常你應該將工作線程的優先級設置為一個很好的級別(例如,用戶可能想要在另一個應用程序中執行某些工作,甚至工作線程也應該很好),即使Windows已經提升了“活動”進程線程(應用程序)你有一個輸入焦點的窗口)一點點,所以它會感覺更敏感。 當您需要滿足一些時間限制時,通常需要更高的優先級。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM