web-dev-qa-db-ja.com

Win7でプロセスまたはスレッドのI / O優先度を変更するにはどうすればよいですか?

Process Explorerは、特定のスレッドの有効なIO優先度を表示できますが、変更することはできません。IO優先度のサポートは、比較的新しい機能であり、プログラムは独自のIO優先順位を設定しません。デフォルトではIO優先順位は、プロセス優先順位ではなくスレッド優先順位から派生しているようです。プロセスエクスプローラーも変更できません。

IO特定のスレッドの優先度/特定のプロセスのすべてのスレッドの優先度を変更するのに役立つ他のツールはありますか?

32
RomanSt

既製ツール

手動のユーザーアクションまたは自動化と永続化のいずれかによってプロセスI/Oの優先順位を設定するサードパーティツールは、 になります。投げ縄を処理します 。ほとんどすべてのプロセス設定を設定でき、永続的に、またはルールによって設定できます(たとえば、これが発生した場合は、そのI/O優先度を変更します)。

プログラマティック回答

答えは、NTネイティブAPINTSetInformationProcessへの単純なAPI呼び出しです。これは、2008 DDKではクラス 'IoPriority'として定義されています。 NT6では、2つのレベルのみがサポートされています:Very Low(background)およびNormal 。技術的に5つのレベルが定義されています-クリティカル、高、通常、低、および非常に低。 Criticalレベルは、ページング操作のために予約されています。他のデータはありません。

ただし、I/O優先度を使用する適切な方法は、PROCESSS_MODE_BACKGROUND_BEGINを指定して、Windows APISetProcessPriorityClassを呼び出して「バックグラウンドモード」を開始することだけです。 。これにより、IDLE CPU優先度クラスとともに、非常に低い(バックグラウンド)I/O優先度が使用されます。完了したら、PROCESS_MODE_BACKGROUND_ENDを使用して元に戻します。

SetThreadPriorityAPIでも、特定のスレッドに対してこの同じバックグラウンドモードを使用できます。ここではTHREAD_MODE_BACKGROUND_BEGIN/ENDを指定します。

11
dyasta

誰も気にしないのを見て、これを開発しました: https://sourceforge.net/projects/iopriority/ (オープンソース)

このプログラムは、プロセスのI/O優先順位を設定でき、すべてのスレッドがすぐにプロセスの影響を受けます。プロセスではなくスレッドで動作するように変更するのは非常に簡単です。

23
Wye

ProcessHacker は、任意のプロセスのIO優先順位を変更できるGUIツールです。

14
RomanSt

私はPRIOと呼ばれる無料のアプリに夢中です。これは、非常に小さい(1 MB未満)フットプリントを持つ(特に)プロセス優先度セーバーです。インストール後、必要になるまでバックグラウンドでサイレントに実行され、そのインターフェイスはWindowsタスクマネージャーに直接組み込まれ、機能が拡張され、追加された機能が常にタスクマネージャーの一部であるかのように機能します。タスクマネージャーでプロセスの優先順位を変更する目的でプロセスを右クリックすると、プロセスのCPU優先順位だけでなくそのI/O優先順位も変更できるため、PRIOに追加された機能のいくつかが明らかになります(質問に答えてください) 、必要に応じて新しい設定を保存することもできます。これにより、そのプロセス(つまり、そのプログラム)が実行されるたびに、ユーザーが設定して保存したCPUとI/Oプロセスの優先順位の両方が有効になります。

アプリには、Windowsタスクマネージャーのさまざまなタブの機能を拡張する他の機能があります。 32ビットシステムと64ビットシステムの両方にバージョンが存在し、アプリは個人用に無料で使用できます。

1
Mike Mounier