プログラミングのメモ帳(C/C++/HSP)

日々のプログラミングで気づいた点や小技集を紹介します。(Windows 10/XP/Vista、VC2017、HSP)

プロセスのワーキングセットを最小化

2008年07月12日 20時52分00秒 | プロセス関連

プロセスのワーキングセットをできるだけ減らして最小化します。
最小化するにはEmptyWorkingSet()関数、またはSetProcessWorkingSetSize()関数を利用します。(戻る)

  1. プロセスのハンドルを開く(OpenProcess)
  2. プロセスのワーキングセットを最小化(EmptyWorkingSet)
  3. プロセスのハンドルを閉じる(CloseHandle)

プロセスを開くときにPROCESS_QUERY_INFORMATIONPROCESS_SET_QUOTAの2つのアクセス権を割り当てる必要があります。

プロトタイプ宣言

HANDLE OpenProcess(
    DWORD   dwDesiredAccess,    // アクセス・フラグ
    BOOL    bInheritHandle,     // ハンドルの継承オプション
    DWORD   dwProcessId         // プロセス識別子
);

BOOL CloseHandle(
    HANDLE  hObject             // オブジェクトのハンドル
);

BOOL EmptyWorkingSet(
    HANDLE      hProcess        // プロセスのハンドル
);

サンプル

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <Psapi.h>      // Psapi.Lib

// メイン関数
int main( int argc, char *argv[] )
{
    DWORD dwAccess = (PROCESS_QUERY_INFORMATION | PROCESS_SET_QUOTA);
    DWORD dwProcessID = GetCurrentProcessId();
    HANDLE hProcess;
    
    if ( argc > 1 ){
        dwProcessID = atoi( argv[1] );
    }
    if ( (hProcess = OpenProcess(dwAccess,FALSE,dwProcessID)) != NULL ){
//      if ( SetProcessWorkingSetSize(hProcess,0xFFFFFFFF,0xFFFFFFFF) ){
        if ( EmptyWorkingSet(hProcess) ){
            printf( TEXT("指定プロセスのワーキングセットを最小化しました。\n") );
        }
        else{
            printf( TEXT("%lu:EmptyWorkingSet()関数のエラーです。\n"), GetLastError() );
        }
        CloseHandle( hProcess );
        return 0;
    }
    printf( TEXT("%lu:OpenProcess()関数のエラーです。\n"), GetLastError() );
    return 1;
}
  • ヘッダファイルとしてPsapi.hをインクルードします。
  • インポートライブラリとしてPsapi.Libをリンクします。
  • 不必要にプロセスのワーニングセットを最小化するとパフォーマンスが低下することがあります。

関連記事



コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« プロセスの最大/最小ワーキ... | トップ | プロセスのメモリ・ページ情... »
最新の画像もっと見る

コメントを投稿

プロセス関連」カテゴリの最新記事