SetProcessWorkingSetSize 関数 (memoryapi.h)

指定したプロセスのワーキング セットの最小サイズと最大サイズを設定します。

構文

BOOL SetProcessWorkingSetSize(
  [in] HANDLE hProcess,
  [in] SIZE_T dwMinimumWorkingSetSize,
  [in] SIZE_T dwMaximumWorkingSetSize
);

パラメーター

[in] hProcess

ワーキング セットサイズを設定するプロセスへのハンドル。

ハンドルには 、PROCESS_SET_QUOTA アクセス権が必要です。 詳細については、「 プロセス のセキュリティとアクセス権」を参照してください。

[in] dwMinimumWorkingSetSize

プロセスの最小ワーキング セット サイズ (バイト単位)。 仮想メモリ マネージャーは、プロセスがアクティブなときは常に、少なくともこのメモリをプロセス内に保持しようとします。

このパラメーターは 0 より大きく、ワーキング セットの最大サイズ以下である必要があります。 既定のサイズは 50 ページです (たとえば、4K ページ サイズのシステムでは 204,800 バイトです)。 値が 0 より大きく、20 ページ未満の場合、最小値は 20 ページに設定されます。

dwMinimumWorkingSetSizedwMaximumWorkingSetSize の両方に値 (SIZE_T)1 がある場合、関数は指定したプロセスのワーキング セットからできるだけ多くのページを削除します。

[in] dwMaximumWorkingSetSize

プロセスのワーキング セットの最大サイズ (バイト単位)。 仮想メモリ マネージャーは、プロセスがアクティブで使用可能なメモリが少ない場合は常に、この数のメモリをプロセス内に保持しようとします。

このパラメーターは、13 ページ以上である必要があります (たとえば、4K ページ サイズのシステムでは 53,248 ページ)、システム全体の最大値 (使用可能なページ数から 512 ページを引いたページ数) 未満である必要があります。 既定のサイズは 345 ページです (たとえば、4K ページ サイズのシステムでは 1,413,120 バイトです)。

dwMinimumWorkingSetSizedwMaximumWorkingSetSize の両方に値 (SIZE_T)1 がある場合、関数は指定したプロセスのワーキング セットからできるだけ多くのページを削除します。

戻り値

関数が成功すると、戻り値は 0 以外になります。

関数が失敗した場合は、0 を返します。 GetLastError を呼び出して、拡張エラー情報を取得します。

解説

プロセスのワーキング セットは、現在物理メモリに常駐しているプロセスの仮想アドレス空間内のメモリ ページのセットです。 これらのページは、ページ フォールトをトリガーせずにアプリケーションで使用できます。 ページ フォールトの詳細については、「 ワーキング セット」を参照してください。 ワーキング セットの最小サイズと最大サイズは、プロセスの仮想メモリのページング動作に影響します。

指定したプロセスのワーキング セットを空にするには、ワーキング セットの最小サイズと最大サイズの両方に値 (SIZE_T)1 を指定します。 これにより、ワーキング セットからできるだけ多くのページが削除されます。 EmptyWorkingSet 関数は、この目的でも使用できます。

dwMinimumWorkingSetSize または dwMaximumWorkingSetSize の値がプロセスの現在のワーキング セット サイズより大きい場合、指定されたプロセスにはSE_INC_WORKING_SET_NAME特権が必要です。 通常、すべてのユーザーはこの特権を持っています。 セキュリティ特権の詳細については、「 特権」を参照してください。

Windows Server 2003 および Windows XP: 指定されたプロセスには 、SE_INC_BASE_PRIORITY_NAME 特権が必要です。 管理者グループと Power Users グループのユーザーは、通常、この特権を持ちます。

オペレーティング システムは、先着順でワーキング セット サイズを割り当てます。 たとえば、アプリケーションが 64 メガバイトのシステムで 40 MB を最小ワーキング セット サイズとして正常に設定し、2 つ目のアプリケーションが 40 メガバイトのワーキング セット サイズを要求した場合、オペレーティング システムは 2 番目のアプリケーションの要求を拒否します。

SetProcessWorkingSetSize 関数を使用して、アプリケーションの最小および最大ワーキング セット サイズを設定しても、要求されたメモリが予約されたり、常に常駐状態のままになることは保証されません。 アプリケーションがアイドル状態の場合、またはメモリ不足の状況が原因でメモリが必要になった場合、オペレーティング システムはアプリケーションのワーキング セットを減らすことができます。 アプリケーションは VirtualLock関数を使用して、メモリ内のアプリケーションの仮想アドレス空間の範囲をロックできます。ただし、システムのパフォーマンスが低下する可能性があります。

アプリケーションのワーキング セット サイズを大きくすると、システムの残りの部分から物理メモリを取り除きます。 これにより、他のアプリケーションとシステム全体のパフォーマンスが低下する可能性があります。 また、物理メモリが存在する必要がある操作 (プロセス、スレッド、カーネル プールの作成など) が失敗する可能性もあります。 したがって、 SetProcessWorkingSetSize 関数を慎重に使用する 必要があります。 アプリケーションを設計するときは、常にシステム全体のパフォーマンスを考慮する必要があります。

要件

   
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
Header memoryapi.h
Library onecore.lib
[DLL] Kernel32.dll

関連項目

GetProcessWorkingSetSize

プロセスのワーキング セット

プロセス関数とスレッド関数

処理

SetProcessWorkingSetSizeEx

VirtualLock