6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

タスクスケジューラから起動したプログラムが重いのは優先度が低いからかも

Posted at

なんか遅い

Windowsでプログラムを定期実行したい時はタスクスケジューラに登録して実行しますが、
実行されるプログラムがなんか遅い時ってありませんか?

一度、プログラムをタスクスケジューラ経由ではなく手動で実行してみて比較し、
明らかに遅かったらこの先に書く状況がビンゴで、改善できるかもしれません。

優先度を確認

タスクマネージャーを起動し、タスクスケジューラから実行したプログラムの「基本優先度」を確認してみてください。
「基本優先度」が表示されていない場合は、項目名のあたりで右クリックし「列の選択」でチェックを入れると表示されるようになります。
image.png

優先度「低」になっていませんか?
image.png

また、リソースモニターの「ディスク」タブにも「I/O優先度」という項目があります。
こちらも優先度が「低」になっていませんか?
image.png

優先度「低」になっていたあなた! ビンゴなのでこの先をお読みください。

原因

タスクスケジューラでタスクを登録すると、標準で優先度7に設定されるようです。
(参考)TaskSettings.Priority property

The default value is 7. Priority levels 7 and 8 are used for background tasks ...

優先度7はバックグラウンドタスク向け…と書いてありますね。
このため、優先度が高いプロセスが起動されると、CPUやディスクI/Oをそちらに奪われてしまうようです。

優先度の設定変更

タスクスケジューラに登録されたタスクを実行する時の優先度を上げることで、
CPUやディスクI/Oの利用優先度を上げることができます。

変更手順は以下の通り。(残念ながらタスクスケジューラからGUIでは変更できないようです…)

  1. タスクスケジューラから該当のタスクを右クリックし「エクスポート」する。
  2. エクスポートされたXMLを開き「priority」欄の「7」の部分を変更する。
    image.png
  3. タスクスケジューラから該当のタスクを右クリックし「削除」する。
  4. タスクスケジューラの「タスクスケジューラライブラリ」で右クリックし「インポート」を選択。
    編集したXMLを指定しタスクを登録する。

これで、該当のタスクを実行する際の優先度が変更されます。
priorityを3に設定してタスク登録⇒実行した所、優先度「低」ではなく「標準」で実行されるようになり、
バッチ処理の所要時間が大きく短縮されました。

その他

  • priorityを1に設定しても優先度が「高」にはならず「標準」のままだった。
    設定変更しているユーザーの権限が関係するのかも?

  • 「サービス」で起動されるプログラムの優先度って変更できるのかな…?
    よくわからない。。

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?