私は、LINQクエリをプリコンパイルし、後で必要となるいくつかの値をプリコンパイルするためにいくつかのバックグラウンドスレッドを使用するWPFアプリケーションを持っています。 TPLがでこれらの作業を開始するために使用されます。この作品多くのTPLバックグラウンドスレッドは、WPFのUIスレッドで遅れを生みます。
var newTask = new Task(taskAction, myCancelToken, TaskCreationOptions.LongRunning);
newTask.Start();
、タスクはしかし、これらのスレッドが高いCPU負荷を引き起こし、それがつまずくする傾向UIに知覚され、複数のCPUコアなどに分布していますスレッドが終了しない限り、フリーズすることもできます。
だから、UIをスムーズにするにはどうすればよいでしょうか。私が研究したことで、スレッドに特別な優先順位を与えるはずのものではないことがわかりました。他のものは、Thread.Sleep()を頻繁に使用することがやり方であることを意味しています。
私が気付いていない他の方法はありますか?スレッドの優先順位付けには本当に不利な点があります(これはTPL経由では直接実行できません)。
ありがとうございます!
タスクの優先順位付けに関する
'TaskCreationOptions.LongRunning'は、スレッドプールを使用する代わりに新しいスレッドを作成します。いくつのスレッドが起動していて、ターゲットマシンにはいくつのコアがありますか? –
私は約10個または12個のタスクを開始しています。 LongRunningモードはちょうど試したもので、私はそれがなくても同じ結果を出しました。特別な専用ターゲットシステムの設定がないため、コアの数が異なる場合があります。 –