Função SetProcessWorkingSetSize (memoryapi.h)
Define os tamanhos mínimo e máximo do conjunto de trabalho para o processo especificado.
Sintaxe
BOOL SetProcessWorkingSetSize(
[in] HANDLE hProcess,
[in] SIZE_T dwMinimumWorkingSetSize,
[in] SIZE_T dwMaximumWorkingSetSize
);
Parâmetros
[in] hProcess
Um identificador para o processo cujos tamanhos de conjunto de trabalho devem ser definidos.
O identificador deve ter o acesso de PROCESS_SET_QUOTA correto. Para obter mais informações, consulte Direitos de Acesso e Segurança do Processo.
[in] dwMinimumWorkingSetSize
O tamanho mínimo do conjunto de trabalho para o processo, em bytes. O gerenciador de memória virtual tenta manter pelo menos essa quantidade de memória residente no processo sempre que o processo estiver ativo.
Esse parâmetro deve ser maior que zero, mas menor ou igual ao tamanho máximo do conjunto de trabalho. O tamanho padrão é de 50 páginas (por exemplo, são 204.800 bytes em sistemas com um tamanho de página de 4K). Se o valor for maior que zero, mas menor que 20 páginas, o valor mínimo será definido como 20 páginas.
Se dwMinimumWorkingSetSize e dwMaximumWorkingSetSize tiverem o valor (SIZE_T)–1, a função removerá o máximo possível de páginas do conjunto de trabalho do processo especificado.
[in] dwMaximumWorkingSetSize
O tamanho máximo do conjunto de trabalho para o processo, em bytes. O gerenciador de memória virtual tenta manter não mais do que tanta memória residente no processo sempre que o processo estiver ativo e a memória disponível estiver baixa.
Esse parâmetro deve ser maior ou igual a 13 páginas (por exemplo, 53.248 em sistemas com um tamanho de página de 4K) e menor que o máximo de todo o sistema (número de páginas disponíveis menos 512 páginas). O tamanho padrão é de 345 páginas (por exemplo, são 1.413.120 bytes em sistemas com um tamanho de página de 4K).
Se dwMinimumWorkingSetSize e dwMaximumWorkingSetSize tiverem o valor (SIZE_T)–1, a função removerá o máximo possível de páginas do conjunto de trabalho do processo especificado.
Valor retornado
Se a função for bem-sucedida, o valor retornado será diferente de zero.
Se a função falhar, o valor retornado será zero. Chame GetLastError para obter informações de erro estendidas.
Comentários
O conjunto de trabalho de um processo é o conjunto de páginas de memória no espaço de endereço virtual do processo que atualmente residem na memória física. Essas páginas estão disponíveis para um aplicativo usar sem disparar uma falha de página. Para obter mais informações sobre falhas de página, consulte Conjunto de trabalho. Os tamanhos mínimo e máximo do conjunto de trabalho afetam o comportamento de paginação da memória virtual de um processo.
O conjunto de trabalho do processo especificado pode ser esvaziado especificando o valor (SIZE_T)–1 para os tamanhos mínimo e máximo do conjunto de trabalho. Isso remove o maior número possível de páginas do conjunto de trabalho. A função EmptyWorkingSet também pode ser usada para essa finalidade.
Se os valores de dwMinimumWorkingSetSize ou dwMaximumWorkingSetSize forem maiores que os tamanhos atuais do conjunto de trabalho do processo, o processo especificado deverá ter o privilégio SE_INC_WORKING_SET_NAME . Todos os usuários geralmente têm esse privilégio. Para obter mais informações sobre privilégios de segurança, consulte Privilégios.
Windows Server 2003 e Windows XP: O processo especificado deve ter o privilégio SE_INC_BASE_PRIORITY_NAME . Os usuários nos grupos Administradores e Usuários do Power geralmente têm esse privilégio.
O sistema operacional aloca tamanhos de conjunto de trabalho por itens por 1 a 0. Por exemplo, se um aplicativo definir com êxito 40 megabytes como seu tamanho mínimo de conjunto de trabalho em um sistema de 64 megabytes e um segundo aplicativo solicitar um tamanho de conjunto de trabalho de 40 megabytes, o sistema operacional negará a solicitação do segundo aplicativo.
Usar a função SetProcessWorkingSetSize para definir os tamanhos mínimos e máximos do conjunto de trabalho de um aplicativo não garante que a memória solicitada será reservada ou que ela permanecerá residente o tempo todo. Quando o aplicativo está ocioso ou uma situação de memória baixa causa uma demanda por memória, o sistema operacional pode reduzir o conjunto de trabalho do aplicativo. Um aplicativo pode usar a função VirtualLockpara bloquear intervalos do espaço de endereço virtual do aplicativo na memória; no entanto, isso pode prejudicar potencialmente o desempenho do sistema.
Quando você aumenta o tamanho do conjunto de trabalho de um aplicativo, você está tirando a memória física do restante do sistema. Isso pode prejudicar o desempenho de outros aplicativos e do sistema como um todo. Ele também pode levar a falhas de operações que exigem a presença de memória física (por exemplo, criação de processos, threads e pool de kernel). Portanto, você deve usar a função SetProcessWorkingSetSize cuidadosamente. Você sempre deve considerar o desempenho de todo o sistema ao criar um aplicativo.
Requisitos
Cliente mínimo com suporte | Windows XP [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows Server 2003 [somente aplicativos da área de trabalho] |
Cabeçalho | memoryapi.h |
Biblioteca | onecore.lib |
DLL | Kernel32.dll |