なんか遅い
Windowsでプログラムを定期実行したい時はタスクスケジューラに登録して実行しますが、
実行されるプログラムがなんか遅い時ってありませんか?
一度、プログラムをタスクスケジューラ経由ではなく手動で実行してみて比較し、
明らかに遅かったらこの先に書く状況がビンゴで、改善できるかもしれません。
優先度を確認
タスクマネージャーを起動し、タスクスケジューラから実行したプログラムの「基本優先度」を確認してみてください。
「基本優先度」が表示されていない場合は、項目名のあたりで右クリックし「列の選択」でチェックを入れると表示されるようになります。
また、リソースモニターの「ディスク」タブにも「I/O優先度」という項目があります。
こちらも優先度が「低」になっていませんか?
優先度「低」になっていたあなた! ビンゴなのでこの先をお読みください。
原因
タスクスケジューラでタスクを登録すると、標準で優先度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では変更できないようです…)
- タスクスケジューラから該当のタスクを右クリックし「エクスポート」する。
- エクスポートされたXMLを開き「priority」欄の「7」の部分を変更する。
- タスクスケジューラから該当のタスクを右クリックし「削除」する。
- タスクスケジューラの「タスクスケジューラライブラリ」で右クリックし「インポート」を選択。
編集したXMLを指定しタスクを登録する。
これで、該当のタスクを実行する際の優先度が変更されます。
priorityを3に設定してタスク登録⇒実行した所、優先度「低」ではなく「標準」で実行されるようになり、
バッチ処理の所要時間が大きく短縮されました。
その他
-
priorityを1に設定しても優先度が「高」にはならず「標準」のままだった。
設定変更しているユーザーの権限が関係するのかも? -
「サービス」で起動されるプログラムの優先度って変更できるのかな…?
よくわからない。。