ワーキングセットの監視

説明:

関数呼出し後五秒間待つ。次に、その時点でフォアグラウンドウィンドウとなっているウィンドウを探し、そのウィンドウを作成したプロセスをオープンする。オープンしたら、ワーキングセットの監視を開始し、十秒間待つ。最後に、その十秒間でのワーキングセットの変更情報を表示する。

キーワード:

InitializeProcessForWsWatch, GetWsChanges

サンプルコード:

void DispWsChanges()
{
	DWORD i;
	DWORD ProcessId;
	HANDLE hProcess;
	HWND hWnd;
	char WindowTitle[1000];
	BOOL bResult;
	PSAPI_WS_WATCH_INFORMATION Infos[10000];

	/* 五秒間待機 */
	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 = InitializeProcessForWsWatch(hProcess);
	if(!bResult) {
		printf("working-set watching can not start.\n");
		CloseHandle(hProcess);
		return;
	}

	/* 十秒間待機 */
	printf("wait 10 seconds...\n");
	Sleep(10000);

	/* 十秒間の間のワーキングセットの変更情報を取得 */
	GetWsChanges(hProcess, Infos, sizeof(Infos)); 

	/* 結果を表示 */
	i = 0;
	while(Infos[i].FaultingPc != NULL || Infos[i].FaultingVa != NULL) {
		/* 下記でPcはページフォールトを起こした命令があるアドレス */
		/* Vaはそのページフォールトに対してワーキングセットに追加されたページのアドレス */
		printf("Pc: %p, Va: %p\n", Infos[i].FaultingPc, Infos[i].FaultingVa);
		i++;
	}
	
	CloseHandle(hProcess);
}

(original text:1999/01/06 更新)

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