Process Explorerは、特定のスレッドの有効なIO優先度を表示できますが、変更はできません。IO優先度のサポートは比較的新しい機能であるため、ほとんどのプログラムは独自のIO優先度を設定しません。デフォルトでは、IO優先度は(プロセスの優先度ではなく)スレッドの優先度から派生しているように見えますが、Process Explorerでも変更できません。
特定のスレッド/特定のプロセスのすべてのスレッドのIO優先度を変更するのに役立つ他のツールはありますか?
Process Explorerは、特定のスレッドの有効なIO優先度を表示できますが、変更はできません。IO優先度のサポートは比較的新しい機能であるため、ほとんどのプログラムは独自のIO優先度を設定しません。デフォルトでは、IO優先度は(プロセスの優先度ではなく)スレッドの優先度から派生しているように見えますが、Process Explorerでも変更できません。
特定のスレッド/特定のプロセスのすべてのスレッドのIO優先度を変更するのに役立つ他のツールはありますか?
回答:
既製ツール
手動のユーザーアクションまたは自動化と永続化によって、プロセスI / Oの優先順位を設定するサードパーティ製ツールは、Process Lassoです。ほとんどすべてのプロセス設定を設定でき、永続的に、またはルールによって設定できます(たとえば、これが発生した場合、そのI / O優先度を変更します)。
プログラマティックアンサー
答えは、NTネイティブAPIであるNTSetInformationProcessへの単純なAPI呼び出しです。2008 DDKでは、クラス「IoPriority」として定義されています。NT6では、Very Low(バックグラウンド)とNormalの 2つのレベルのみがサポートされています。技術的には、クリティカル、高、標準、低、および非常に低の5つのレベルが定義されています。クリティカルレベルは、ページング操作用に予約されています。他のデータはありません。
ただし、I / O優先度を使用する適切な方法は、PROCESSS_MODE_BACKGROUND_BEGINを指定して、Windows API SetProcessPriorityClassを呼び出して「バックグラウンドモード」を開始することです。これにより、IDLE CPU優先度クラスとともに、非常に低い(バックグラウンド)I / O優先度が使用されます。完了したら、PROCESS_MODE_BACKGROUND_ENDで元に戻します。
SetThreadPriorityの APIは、特定のスレッドのために、この同じバックグラウンドモードを許可します。ここで、THREAD_MODE_BACKGROUND_BEGIN / ENDを指定します。
誰もそれを気にしなかった後にこれを開発しました:https : //sourceforge.net/projects/iopriority/(オープンソース)
このプログラムはプロセスのI / O優先度を設定でき、すべてのスレッドがすぐにその影響を受けます。プロセスではなくスレッドで動作するように変更するのは非常に簡単です。
ProcessHackerは、任意のプロセスのIO優先度を変更できるGUIツールです。
私はPRIOと呼ばれる無料アプリの一部です。これは、(特に)フットプリントが非常に小さい(1 MB未満の)プロセス優先度セーバーです。インストール後、必要になるまでバックグラウンドでサイレントに実行され、そのインターフェイスはWindowsタスクマネージャーに直接組み込まれ、機能を拡張して、追加された機能が常にタスクマネージャーの一部であるかのようになります。優先度を変更する目的でタスクマネージャーでプロセスを右クリックすると、プロセスのCPU優先度だけでなくそのI / O優先度も変更できるため、PRIOの追加機能の一部が明らかになります(質問を出してください) 、必要に応じて新しい設定を保存することもできます。これにより、プロセス(プログラム)が実行されるたびに、CPUとI / Oプロセスの両方の優先順位が設定され保存されます。
アプリには、Windowsタスクマネージャーのさまざまなタブの機能を拡張する他の機能もあります。バージョンは32ビットシステムと64ビットシステムの両方に存在し、アプリは個人での使用は無料です。