SetProcessWorkingSetSize 函数 (memoryapi.h)

设置指定进程的最小和最大工作集大小。

语法

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

parameters

[in] hProcess

要设置其工作集大小的进程的句柄。

句柄必须具有 PROCESS_SET_QUOTA 访问权限。 有关详细信息,请参阅 进程安全和访问权限

[in] dwMinimumWorkingSetSize

进程的最小工作集大小(以字节为单位)。 每当进程处于活动状态时,虚拟内存管理器会尝试将至少如此多的内存保留在进程中。

此参数必须大于零,但小于或等于最大工作集大小。 例如,默认大小为 50 页 (,在页面大小为 4K) 的系统上,这是 204,800 字节。 如果该值大于零但小于 20 页,则最小值设置为 20 页。

如果 dwMinimumWorkingSetSizedwMaximumWorkingSetSize 的值为 (SIZE_T) –1,则函数将从指定进程的工作集中删除尽可能多的页。

[in] dwMaximumWorkingSetSize

进程的最大工作集大小(以字节为单位)。 每当进程处于活动状态且可用内存不足时,虚拟内存管理器将尝试在进程中保留的内存不超过这一点。

此参数必须大于或等于 13 页 (例如,在页面大小为 4K) 的系统上为 53,248 页,小于系统范围内最大 (可用页数减去 512 页) 。 例如,默认大小为 345 页 (在页面大小为 4K 的系统上为 1,413,120 字节,) 。

如果 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 兆字节设置为其 64 兆字节系统上的最小工作集大小,而第二个应用程序请求 40 兆字节的工作集大小,则操作系统会拒绝第二个应用程序的请求。

使用 SetProcessWorkingSetSize 函数设置应用程序的最小和最大工作集大小并不能保证将保留请求的内存,也不保证始终保留该内存。 当应用程序处于空闲状态或内存不足的情况导致对内存的需求时,操作系统可能会减少应用程序的工作集。 应用程序可以使用 VirtualLock函数锁定内存中应用程序虚拟地址空间的范围;但是,这可能会降低系统的性能。

增加应用程序的工作集大小时,将从系统的其余部分中取出物理内存。 这会降低其他应用程序和整个系统的性能。 它还可能导致需要物理内存 (的操作失败,例如,创建进程、线程和内核池) 。 因此,必须谨慎使用 SetProcessWorkingSetSize 函数。 在设计应用程序时,必须始终考虑整个系统的性能。

要求

   
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
标头 memoryapi.h
Library onecore.lib
DLL Kernel32.dll

另请参阅

GetProcessWorkingSetSize

进程工作集

进程和线程函数

进程

SetProcessWorkingSetSizeEx

VirtualLock