SetProcessWorkingSetSize 函式 (memoryapi.h)

設定指定進程的最小和最大工作集大小。

語法

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

參數

[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 個位元組的系統上,具有 4K 頁面大小) 。

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

傳回值

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

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

備註

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

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

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

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

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

使用 SetProcessWorkingSetSize 函式來設定應用程式的最小和最大工作集大小不保證會保留要求的記憶體,或它隨時都會保留。 當應用程式閒置或記憶體不足的情況導致記憶體需求時,作業系統可以減少應用程式的工作集。 應用程式可以使用 VirtualLock函式來鎖定記憶體中應用程式虛擬位址空間的範圍;不過,這可能會降低系統的效能。

當您增加應用程式的工作集大小時,會從系統的其餘部分移除實體記憶體。 這可能會降低其他應用程式和系統整體的效能。 這也會導致作業失敗,這些作業需要實體記憶體存在 (例如,建立進程、執行緒和核心集區) 。 因此,您必須仔細使用 SetProcessWorkingSetSize 函式。 設計應用程式時,您必須一律考慮整個系統的效能。

需求

   
最低支援的用戶端 Windows XP [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2003 [僅限桌面應用程式]
標頭 memoryapi.h
程式庫 onecore.lib
DLL Kernel32.dll

另請參閱

GetProcessWorkingSetSize

處理工作集

處理序和執行緒函式

程序

SetProcessWorkingSetSizeEx

VirtualLock