SetProcessWorkingSetSize功能设置指定进程的最小和最大工作集大小。
进程的工作集是物理RAM内存中进程可见的一组内存页。这些页面是驻留的,可供应用程序使用,而不会触发页面错误。进程的工作集的大小以字节为单位指定。最小和最大工作集大小影响进程的虚拟内存分页行为。
BOOL SetProcessWorkingSetSize(
HANDLE 【hProcess】, | //打开感兴趣的进程的句柄 |
DWORD 【dwMinimumWorkingSetSize】, | //指定最小工作集大小 |
DWORD 【dwMaximumWorkingSetSize】 | //指定最大工作集大小 |
); |
参数
【hProcess】
将设置其工作集大小的进程的打开句柄。
Windows NT:句柄必须具有PROCESS_SET_QUOTA访问权限。有关详细信息,请参阅过程对象.
【dwMinimumWorkingSetSize】
指定进程的最小工作集大小。当进程处于活动状态时,虚拟内存管理器会尝试至少保留这么多内存。
如果【dwMinimumWorkingSetSize】和【dwMaximumWorkingSetSize】的值为0xffffffff,则该函数将指定进程的工作集临时修剪为零。这实质上是将物理RAM存储器中的进程交换出来。
【dwMaximumWorkingSetSize】
指定进程的最大工作集大小。虚拟内存管理器每当进程处于活动状态并且内存不足时,都会尝试保留不超过这么多内存驻留在进程中。
如果【dwMinimumWorkingSetSize】和【dwMaximumWorkingSetSize】的值为0xffffffff,则该函数将指定进程的工作集临时修剪为零。这实质上是将物理RAM存储器中的进程交换出来。
返回值
如果函数成功,返回值不为零。
如果函数失败,返回值为零。致电GetLastError以获取扩展错误信息。
备注
可以通过为最小和最大工作集大小指定值0xffffffff来清空指定进程的工作集。
如果【dwMinimumWorkingSetSize】或【dwMaximumWorkingSetSize】的值大于进程的当前工作集大小,则指定的进程必须具有SE_INC_BASE_PRIORITY_NAME权限。管理员和高级用户组中的用户通常具有此权限。有关安全权限的详细信息,请参阅特权.
操作系统以先到先得的原则分配工作集大小。例如,如果应用程序成功将40兆字节设置为64 MB系统上的最小工作集大小,而第二个应用程序请求40 MB工作集大小,则操作系统将拒绝第二个应用程序的请求。
使用SetProcessWorkingSetSize功能设置应用程序的最小和最大工作集大小并不能保证所请求的内存将被保留,或者它始终保持驻留。当应用程序空闲或内存不足的情况导致对内存的需求时,操作系统可以减少应用程序的工作集。应用程序可以使用VirtualLock功能来锁定应用程序在内存中的虚拟地址空间的范围;然而,这可能会降低系统的性能。
当您增加应用程序的工作集大小时,您将从系统的其余部分中取走物理内存。这可能会降低其他应用程序和整个系统的性能。它还可能导致需要物理内存存在的操作失败;例如,创建进程,线程和内核池。因此,您必须仔细使用SetProcessWorkingSetSize功能。在设计应用程序时,必须始终考虑整个系统的性能。
也可以看看