プラットフォーム SDK
SetProcessWorkingSetSize
指定されたプロセスの最小ワーキングセットサイズと最大ワーキングセットサイズを設定します。
プロセスのワーキングセットは、プロセスに見えている物理 RAM メモリ内のメモリページの集合です。これらのページは常駐であり、アプリケーションがページフォールトを起こさずに利用することができます。プロセスのワーキングセットのサイズはバイト単位で指定します。最小ワーキングセットサイズと最大ワーキングセットサイズは、プロセスの仮想メモリページングの動作に影響を与えます。
BOOL SetProcessWorkingSetSize(
HANDLE hProcess, // 操作対象プロセスの開いているハンドル
DWORD dwMinimumWorkingSetSize,
// 最小ワーキングセットサイズ
DWORD dwMaximumWorkingSetSize
// 最大ワーキングセットサイズ
);
パラメータ
- hProcess
- ワーキングセットのサイズを設定するプロセスの開いているハンドルを指定します。
Windows NT: このハンドルには、PROCESS_SET_QUOTA アクセス権が必要です。
- dwMinimumWorkingSetSize
- プロセスの最小ワーキングセットサイズを指定します。仮想メモリマネージャは、プロセスがアクティブになるたびに、少なくともこのサイズのメモリを常にプロセス内に確保しようとします。
dwMinimumWorkingSetSize と dwMaximumWorkingSetSize の両方に 0xffffffff を指定すると、指定したプロセスのワーキングセットのサイズが一時的に 0 になります。プロセスは実質上、物理 RAM メモリから仮想メモリにスワップアウトします。
- dwMaximumWorkingSetSize
- プロセスの最大ワーキングセットサイズを指定します。仮想メモリマネージャは、メモリが不足しているときにプロセスがアクティブになった場合、プロセス内に常駐するメモリのサイズがこの値を超えないようにします。
dwMinimumWorkingSetSize と dwMaximumWorkingSetSize の両方に 0xffffffff を指定すると、指定したプロセスのワーキングセットのサイズが一時的に 0 になります。プロセスは実質上、物理 RAM メモリから仮想メモリにスワップアウトします。
戻り値
関数が成功すると、0 以外の値が返ります。
関数が失敗すると、0 が返ります。拡張エラー情報を取得するには、GetLastError 関数を使います。
解説
最小ワーキングセットサイズと最大ワーキングセットサイズの両方に 0xffffffff を指定すると、指定したプロセスのワーキングセットを空にすることができます。
dwMinimumWorkingSetSize と dwMaximumWorkingSetSize のどちらかがプロセスの現在のワーキングセットサイズを超える場合は、指定したプロセスに SE_INC_BASE_PRIORITY_NAME 権が必要です。一般に Administrators グループまたは Power Users グループのユーザーであればこの権限を持っています。
オペレーティングシステムはワーキングセットを先着順に割り当てます。たとえば、64MB のメモリを搭載しているシステムで、あるアプリケーションがその最小ワーキングセットとして 40MB を獲得した後、別のアプリケーションが 40MB のメモリを要求すると、オペレーティングシステムは 2 番目のアプリケーションの要求を拒否します。
SetProcessWorkingSetSize 関数を使ってアプリケーションの最小ワーキングセットサイズと最大ワーキングセットサイズを設定しても、要求したメモリが確保されるとは限りません。また、そのサイズのメモリが常に割り当てられているとも限りません。アプリケーションがアイドル状態であったり、システム全体でメモリが不足している場合は、オペレーティングシステムがアプリケーションのワーキングセットを減らすことがあります。アプリケーションでは VirtualLock 関数を使って、メモリ内での自らの仮想アドレス空間の範囲をロックすることができます。ただし、その結果、システムのパフォーマンスが低下することがあります。
アプリケーションのワーキングセットサイズを増やすと、システムの構成要素やほかのアプリケーションから物理メモリを奪うことになります。その結果、ほかのアプリケーションやシステム全体のパフォーマンスが低下します。また、プロセス、スレッド、カーネルプールの作成など、物理メモリを必要とする操作が失敗するようになります。以上のことから、SetProcessWorkingSetSize 関数は慎重に使ってください。アプリケーションを設計するときは常にシステム全体のパフォーマンスを考えるようにしてください。
対応情報
Windows NT: バージョン 3.5 以降を使います。
Windows: サポートされていません。
ヘッダ : winbase.h で宣言されています。
インポートライブラリ : kernel32.lib とリンクします。
参照
GetProcessWorkingSetSize、