EmptyWorkingSet ワーキングセットの最小化

Cの宣言:

BOOL EmptyWorkingSet(HANDLE hProcess);

説明:

hProcessで指定したプロセスのワーキングセットのサイズを一時的に0にする。

引数の意味は以下の通り。
hProcess ワーキングセットのサイズを0にするプロセスのハンドル

戻り値は、関数の実行に成功したか否かを表す真偽値である。

Cのサンプル:

関数呼出し後五秒間待つ。次に、その時点でフォアグラウンドウィンドウとなっているウィンドウを探し、そのウィンドウを作成したプロセスのワーキングセットのサイズを一時的に0にし、十秒間待つ。十秒後に、その時点でのプロセスのワーキングセットのサイズを表示することにより、その十秒間でプロセスが使用したワーキングセット中のメモリページの量を推測することができる。
void TestWsEmpty()
{
	HWND hWnd;
	char WindowTitle[1000];
	DWORD ProcessId;
	HANDLE hProcess;
	BOOL bResult;
	PROCESS_MEMORY_COUNTERS MemInfo;
	int i;

	for(i=5; i>0; i--) {
		printf("%d秒前\n", i);
		Sleep(1000);
	}

	hWnd = GetForegroundWindow();
	GetWindowText(hWnd, WindowTitle, 1000);
	GetWindowThreadProcessId(hWnd, &ProcessId);
	hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessId);

	printf("target: %s\n", WindowTitle);
	bResult = EmptyWorkingSet(hProcess);
	if(!bResult) {
		printf("working-set can not empty.\n");
		return;
	}

	printf("wait 10 seconds...\n");
	Sleep(10000);

	GetProcessMemoryInfo(hProcess, &MemInfo, sizeof(MemInfo));
	printf("current working-set size: %d\n", MemInfo.WorkingSetSize);
}
(original text:1999/01/06 更新)

本ドキュメントの内容は保証しません。本ドキュメントによって生じた結果について、一切の責任を負いません。