我有一個WPF應用程序,它使用幾個後臺線程來預編譯LINQ查詢並預先存儲一些值,稍後將需要。 TPL被使用來啓動這些任務:沉重的TPL後臺線程在WPF的用戶界面線程產生滯後
var newTask = new Task(taskAction, myCancelToken, TaskCreationOptions.LongRunning);
newTask.Start();
這工作,任務分佈在幾個CPU內核等。但是,這些線程會導致高CPU負載,那就是在用戶界面,這往往絆倒察覺甚至凍結,只要線程沒有完成。
那麼,什麼可能是一個合理的方式來平滑UI。通過研究發現,那個人不應該給線程特別的優先權。其他人的意思是,經常使用Thread.Sleep()是要走的路,這對我來說似乎有點陳腐和詭詐。
有沒有額外的方式我不知道?線程優化是否存在真正的缺點(這不可能通過TPL直接實現,afaik)?
在此先感謝!
`TaskCreationOptions.LongRunning`創建新線程而不是使用線程池。你開始多少個線程,你的目標機器有多少個核心? – 2011-12-16 09:38:21
我開始約十或十二個任務。 LongRunning模式只是一個嘗試,我沒有開始,並有相同的結果。核心數量可能不同,因爲沒有特殊的專用目標系統設置。 – 2011-12-16 10:56:35