Le rognage de l'ensemble de travail ne peut être évité qu'en verrouillant les pages en mémoire, soit en les verrouillant explicitement à l'aide de la commande VirtualLock ou en mappant la mémoire en AWE . Mais les deux opérations sont extrêmement privilégiées et nécessitent que l'application soit exécutée sous un compte qui a le droit de 'verrouiller les pages en mémoire'. voir Comment faire : Activer l'option de verrouillage des pages en mémoire . Par défaut, personne, pas même les administrateurs, n'a ce privilège.
Techniquement, c'est la réponse que vous cherchez (en omettant les détails "mineurs" sur la façon d'identifier les régions à verrouiller). Mais votre question indique que vous êtes sur une voie totalement erronée.
Le rognage de l'ensemble de la faune et de la flore est une opération fréquente qui n'a pas d'effets indésirables graves. Vous confondez très probablement l'ajustement avec la pagination de la mémoire, mais il s'agit de deux phases distinctes de la durée de vie des pages de mémoire. L'ajustement se produit lorsque le système d'exploitation retire le mappage de la page au processus et place la page dans une liste d'attente. Il s'agit d'une opération très rapide et simple : la page est ajoutée à la liste d'attente et le système d'exploitation de l'OS la supprime. pte est marqué en conséquence. Aucune opération d'E/S ne se produit, le contenu physique de la RAM n'est pas modifié. Lorsque, et si, le processus accède à nouveau à la page découpée, une opération d'entrée/sortie est effectuée. défaut mou se produira. L'erreur de la TLB déclenchera une marche vers le noyau, ce dernier localisera la page dans la liste d'attente et la réallouera au processus. Rapide, rapide, facile, encore une fois, aucune opération d'E/S ne se produit, ni aucun changement de contenu de RAM pour la page. Ainsi, un processus dont tout l'ensemble de travail a été réduit retrouvera l'ensemble actif assez rapidement (microsecondes) s'il continue à référencer les pages.
Ce n'est que lorsque le système d'exploitation aura besoin de nouvelles pages pour sa liste libre qu'il consultera la liste d'attente, prendra la page la plus ancienne et l'échangera réellement sur le disque. Dans cette situation, il y a effectivement des entrées-sorties et le contenu de la RAM est réduit à zéro. Lorsque le processus accède à nouveau à la page a défaut dur se produira. L'erreur de la TLB va réveiller le noyau, qui va inspecter la liste de pte et maintenant une 'vraie' erreur de page va se produire : une nouvelle page libre est allouée, le contenu est lu depuis le disque, et ensuite la page est allouée au processus et l'exécution reprend depuis l'emplacement de l'erreur de la TLB.
Comme vous pouvez le constater, il y a une énorme différence entre l'élagage de l'ensemble de travail et un échange de pages sous pression de la mémoire. Si votre application console est rognée, ne vous en faites pas. Vous ferez des dommages incalculables à la santé du système en verrouillant des pages en mémoire. Et, en fait, vous faites aussi une mauvaise expérience utilisateur en refusant de minimiser quand on vous le demande, juste parce que vous ne comprenez pas le cycle de vie des pages.
Il est vrai qu'il existe des processus qui ont une demande légitime de garder leur poste de travail aussi chaud que possible. Tous ces processus, toujours, sont implémentés en tant que services. Les services bénéficient d'une politique d'élagage plus indulgente de la part du système d'exploitation, et cette politique est réellement configurable.
Si vous êtes vraiment si vous vous préoccupez de la mémoire du système et que vous voulez aider le système d'exploitation, vous devez vous inscrire pour recevoir des notifications de mémoire à l'aide de la fonction CreateMemoryResourceNotification et réagissez à la pression de la mémoire en libérant vos caches, et agrandissez à nouveau vos caches lorsque vous êtes informé que de la mémoire libre est disponible.