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

進程的最小工作集大小,以位元組為單位。 每當進程使用中時,虛擬記憶體管理員會嘗試將這多部記憶體保留在進程中。

此參數必須大於零,但小於或等於工作集大小上限。 例如,預設大小為 50 頁 (,這是 204,800 個字節,在具有 4K 頁面大小的系統上) 。 如果值大於零,但小於 20 頁,最小值會設定為 20 頁。

如果 dwMinimumWorkingSetSizedwMaximumWorkingSetSize 都有值 (SIZE_T) –1,則函式會盡可能從指定進程的工作集中移除多個頁面。

[in] dwMaximumWorkingSetSize

進程的工作集大小上限,以位元組為單位。 每當進程作用中且可用的記憶體不足時,虛擬記憶體管理員會嘗試保留超過此數目的記憶體。

此參數必須大於或等於 13 頁 (例如,具有 4K 頁面大小的系統上為 53,248) ,且小於全系統最大 (可用頁面數目減去 512 頁) 。 例如,預設大小為 345 頁 (,這是系統上 1,413,120 個字節,) 。

如果 dwMinimumWorkingSetSizedwMaximumWorkingSetSize 都有值 (SIZE_T) –1,則函式會盡可能從指定進程的工作集中移除多個頁面。 如需詳細資料,請參閱<備註>。

[in] Flags

控制最小和最大工作集大小的強制執行旗標。

意義
QUOTA_LIMITS_HARDWS_MIN_DISABLE
0x00000002
如果記憶體需求很高,工作集可能會低於最低工作集限制。

此旗標不能與 QUOTA_LIMITS_HARDWS_MIN_ENABLE搭配使用。

QUOTA_LIMITS_HARDWS_MIN_ENABLE
0x00000001
工作集不會低於最低工作集限制。

此旗標不能與 QUOTA_LIMITS_HARDWS_MIN_DISABLE搭配使用。

QUOTA_LIMITS_HARDWS_MAX_DISABLE
0x00000008
如果記憶體不足,工作集可能會超過最大工作集限制。

此旗標不能與 QUOTA_LIMITS_HARDWS_MAX_ENABLE搭配使用。

QUOTA_LIMITS_HARDWS_MAX_ENABLE
0x00000004
工作集將不會超過工作集上限。

此旗標不能與 QUOTA_LIMITS_HARDWS_MAX_DISABLE搭配使用。

傳回值

如果函式成功,則傳回值為非零。

如果此函式失敗,則傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。 如果此函式失敗,則傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError

備註

進程的工作集是目前位於實體記憶體中的進程虛擬位址空間中的記憶體分頁集。 這些頁面可供應用程式使用,而不觸發頁面錯誤。 如需頁面錯誤的詳細資訊,請參閱 工作集。 最小和最大工作集大小會影響程序的虛擬記憶體分頁行為。

您可以針對最小和最大工作集大小指定值 (SIZE_T) -1 ,以清空指定的進程工作集。 這會從工作集移除盡可能多的頁面。 EmptyWorkingSet 函式也可用於此用途。

如果 dwMinimumWorkingSetSizedwMaximumWorkingSetSize 的值大於進程的目前工作集大小,則指定的進程必須具有 SE_INC_WORKING_SET_NAME 許可權。 所有使用者通常都有此許可權。 如需安全性許可權的詳細資訊,請參閱 許可權

Windows Server 2003: 指定的進程必須具有 SE_INC_BASE_PRIORITY_NAME 許可權。 系統管理員和 Power Users 群組中的使用者通常具有此許可權。

操作系統會以第一次提供的第一次服務為基礎,配置工作集大小。 例如,如果應用程式成功將 40 MB 設定為 64 MB 系統上的最小工作集大小,而第二個應用程式要求 40 MB 的工作集大小,則操作系統會拒絕第二個應用程式的要求。

根據預設,使用 SetProcessWorkingSetSize 函式來設定應用程式的最小和最大工作集大小,並不保證要求記憶體會保留,或它隨時都會保留。 當應用程式閑置或低記憶體情況造成記憶體需求時,操作系統可以降低應用程式的工作集低於其最小工作集限制。 如果記憶體不足,系統可能會允許應用程式超過其最大工作集限制。 QUOTA_LIMITS_HARDWS_MIN_ENABLEQUOTA_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)
程式庫 onecore.lib
DLL Kernel32.dll

另請參閱

GetProcessWorkingSetSizeEx

進程工作集

處理序和執行緒函式

程序

VirtualLock

工作集