SetProcessWorkingSetSizeEx 関数 (memoryapi.h)
指定したプロセスのワーキング セットの最小サイズと最大サイズを設定します。
構文
BOOL SetProcessWorkingSetSizeEx(
[in] HANDLE hProcess,
[in] SIZE_T dwMinimumWorkingSetSize,
[in] SIZE_T dwMaximumWorkingSetSize,
[in] DWORD Flags
);
パラメーター
[in] hProcess
ワーキング セットのサイズを設定するプロセスのハンドル。
ハンドルには PROCESS_SET_QUOTA アクセス権が必要です。 詳細については、「 セキュリティとアクセス権の処理」を参照してください。
[in] dwMinimumWorkingSetSize
プロセスの最小ワーキング セット サイズ (バイト単位)。 仮想メモリ マネージャーは、プロセスがアクティブなときは常に、少なくともこのメモリをプロセス内に保持しようとします。
このパラメーターは、0 より大きく、ワーキング セットの最大サイズ以下である必要があります。 既定のサイズは 50 ページです (たとえば、4K ページ サイズのシステムでは 204,800 バイトです)。 値が 0 より大きく、20 ページ未満の場合、最小値は 20 ページに設定されます。
dwMinimumWorkingSetSize と dwMaximumWorkingSetSize の両方に値 (SIZE_T)1 がある場合、関数は指定されたプロセスのワーキング セットからできるだけ多くのページを削除します。
[in] dwMaximumWorkingSetSize
プロセスのワーキング セットの最大サイズ (バイト単位)。 仮想メモリ マネージャーは、プロセスがアクティブであり、使用可能なメモリが少ない場合に常に、この数以下のメモリをプロセス内に保持しようとします。
このパラメーターは、13 ページ以上 (4K ページ サイズのシステムでは 53,248 ページなど)、システム全体の最大値 (使用可能なページ数から 512 ページを引いたページ数) より小さくする必要があります。 既定のサイズは 345 ページです (たとえば、4K ページ サイズのシステムでは 1,413,120 バイトです)。
dwMinimumWorkingSetSize と dwMaximumWorkingSetSize の両方に値 (SIZE_T)1 がある場合、関数は指定されたプロセスのワーキング セットからできるだけ多くのページを削除します。 詳細については、「解説」を参照してください。
[in] Flags
ワーキング セットの最小サイズと最大サイズの適用を制御するフラグ。
戻り値
関数が成功した場合、戻り値は 0 以外です。
関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。 関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。
解説
プロセスのワーキング セットは、現在物理メモリに常駐しているプロセスの仮想アドレス空間内のメモリ ページのセットです。 これらのページは、ページ フォールトをトリガーせずにアプリケーションで使用できます。 ページ フォールトの詳細については、「 ワーキング セット」を参照してください。 ワーキング セットの最小サイズと最大サイズは、プロセスの仮想メモリのページング動作に影響します。
指定したプロセスのワーキング セットを空にするには、ワーキング セットの最小サイズと最大サイズの両方に値 (SIZE_T))1 を指定します。 これにより、ワーキング セットからできるだけ多くのページが削除されます。 EmptyWorkingSet 関数は、この目的にも使用できます。
dwMinimumWorkingSetSize または dwMaximumWorkingSetSize の値がプロセスの現在のワーキング セット サイズより大きい場合、指定されたプロセスにはSE_INC_WORKING_SET_NAME特権が必要です。 通常、すべてのユーザーはこの特権を持っています。 セキュリティ特権の詳細については、「 特権」を参照してください。
Windows Server 2003: 指定されたプロセスには 、SE_INC_BASE_PRIORITY_NAME 特権が必要です。 管理者グループと Power Users グループのユーザーは、通常、この特権を持っています。
オペレーティング システムは、先着順でワーキング セット のサイズを割り当てます。 たとえば、アプリケーションが 64 メガバイトのシステムで 40 MB を最小ワーキング セット サイズとして正常に設定し、2 つ目のアプリケーションが 40 メガバイトのワーキング セット サイズを要求した場合、オペレーティング システムは 2 番目のアプリケーションの要求を拒否します。
既定では、 SetProcessWorkingSetSize 関数を 使用して、アプリケーションの最小および最大ワーキング セット サイズを設定しても、要求されたメモリが予約されることや、常に常駐したままになることは保証されません。 アプリケーションがアイドル状態の場合、またはメモリ不足の状況でメモリの需要が発生した場合、オペレーティング システムは、アプリケーションのワーキング セットを最小ワーキング セットの制限を下回る可能性があります。 メモリが豊富な場合、システムはアプリケーションが最大ワーキング セットの制限を超える可能性があります。 QUOTA_LIMITS_HARDWS_MIN_ENABLEフラグとQUOTA_LIMITS_HARDWS_MAX_ENABLE フラグを使用すると、制限を確実に適用できます。
アプリケーションのワーキング セット サイズを大きくすると、システムの残りの部分から物理メモリが奪われます。 これにより、他のアプリケーションとシステム全体のパフォーマンスが低下する可能性があります。 また、物理メモリが存在する必要がある操作 (プロセス、スレッド、カーネル プールの作成など) が失敗する可能性もあります。 したがって、 SetProcessWorkingSetSize 関数を慎重に使用する 必要があります。 アプリケーションを設計するときは、常にシステム全体のパフォーマンスを考慮する必要があります。
アプリケーションは VirtualLock 関数を使用して、メモリ内のアプリケーションの仮想アドレス空間の範囲をロックできます。ただし、これはシステムのパフォーマンスを低下させる可能性があります。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista [デスクトップ アプリのみ | UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | memoryapi.h (Windows Vista、Windows 7、Windows Server 2008 Windows Server 2008 R2 の Windows.h を含む) |
Library | onecore.lib |
[DLL] | Kernel32.dll |