ワーキングセット
各プロセスにはワーキングセットというものが存在し、このサイズは常に割り当てられている物理メモリ量を意味する。Windowsの場合このワーキングセットのサイズは、最小値と最大値を設定することができ、可能な限りその範囲内のサイズで物理メモリを割り当てる。
なお、現在割り当てられている物理メモリ量を知るには、タスクマネージャーのメモリ使用量という部分を見るとよい。
GetProcessWorkingSetSize
この関数で、あるプロセスのワーキングセットのサイズを取得することができる。自分のプロセスのワーキングセットを設定するには次のように行う。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
const DWORD pid = GetCurrentProcessId(); HANDLE hp = OpenProcess ( PROCESS_ALL_ACCESS, TRUE, pid ); DWORD min; DWORD max; GetProcessWorkingSetSize ( hp, &min, &max ); |
なお、プロセスハンドルを取得する時にPROCESS_ALL_ACCESSというアクセス権限を割り当てているが、これはMSDNを参照するとGetProcessWorkingSetSizeを使うためのプロセスハンドルには、
PROCESS_QUERY_INFORMATION アクセス権が必要です。
ということからである。単純なコンソールアプリケーションで試したところデフォルトでは、最小200KB最大1380KBが設定されているようだ。
SetProcessWorkingSetSize
この関数で、あるプロセスのワーキングセットのサイズを設定することができる。自分のプロセスのワーキングセットを設定するには次のように行う。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
const DWORD pid = GetCurrentProcessId(); HANDLE hp = OpenProcess ( PROCESS_ALL_ACCESS, TRUE, pid ); SetProcessWorkingSetSize ( hp, 1024 * 1024 * 1, 1024 * 1024 * 10 ); |
なお、プロセスハンドルを取得する時にPROCESS_ALL_ACCESSというアクセス権限を割り当てているが、これはMSDNを参照するとSetProcessWorkingSetSizeを使うためのプロセスハンドルには、
PROCESS_SET_QUOTA アクセス権が必要です。
ということからである。また、
dwMinimumWorkingSetSize と dwMaximumWorkingSetSize のどちらかがプロセスの現在のワーキングセットサイズを超える場合は、指定したプロセスにSE_INC_BASE_PRIORITY_NAME 権が必要です。
とも書いてある。これについてはまた次回。
ピンバック: Win32API EnumProcesses(プロセス列挙)の使い方 | 豆知識