Si vous avez de nombreux programmes ouverts et que votre machine utilise trop de mémoire et d'énergie, vous pouvez vouloir fermer un programme sans perdre son état (en l'envoyant dans la mémoire virtuelle) et reprendre le programme plus tard. Le système d'exploitation le fait automatiquement, mais il ne sait pas combien de temps vous souhaitez mettre votre programme en pause et il finit par devenir très lent en essayant de conserver des parties de chaque programme en mémoire et en transférant d'autres parties en mémoire virtuelle. Envoyer manuellement un programme entier en mémoire virtuelle et le récupérer dans le même état quand on le souhaite serait une fonctionnalité intéressante.
Réponse
Trop de publicités?Vos programmes sont toujours en cours d'exécution dans la mémoire virtuelle. (La terminologie utilisée par Windows dans la boîte de dialogue où vous définissez la taille du fichier de pages est extrêmement trompeuse).
Ce que vous demandez, c'est la possibilité de forcer un programme à être sorti par pagination. Il n'existe aucun moyen de le faire directement.
Il finit donc par devenir très lent en essayant de conserver des parties de chaque programme en mémoire et en transférant d'autres parties en mémoire virtuelle.
Ce n'est pas le cas. Les pages de mémoire auxquelles on n'accède pas sont toujours disponibles pour être libérées à d'autres fins (et écrites sur le disque si nécessaire) ; le système d'exploitation n'essaie pas de conserver des morceaux de chaque programme en mémoire, qu'on y accède ou non. Si elles ne sont pas consultées, ce qui est normalement le cas des pages privées d'un programme inactif, elles ne resteront en mémoire que jusqu'à ce qu'il y ait une pression causée par les besoins d'autres programmes. (Jusque-là, il n'y a aucune raison de les sortir de la pagination, n'est-ce pas ?)
Sous Windows XP, la réduction de la fenêtre d'une application entraînait une purge du jeu de travail, mais je pense que XP a été la dernière version où cela s'est avéré vrai.
Si vous voulez vraiment le faire, vous pouvez utiliser la fonction VMmap
de SysInternals. Lorsqu'il démarre, il vous demande de sélectionner un processus. Faites-le, puis sélectionnez View | Empty Working Set.
Notez toutefois que cette opération ne libère que les pages de la liste des pages modifiées ou en attente. (Et ce uniquement pour les pages qui ne se trouvent pas dans les jeux de travail d'autres processus). Les pages déposées dans la liste modifiée seront écrites dans le fichier de pages, puis déplacées vers la liste de réserve. Les pages de la liste de réserve sont considérées comme "disponibles", mais jusqu'à ce qu'elles soient réaffectées à un autre usage, elles contiendront toujours le contenu du processus d'origine.
Le résultat net est exactement le même que ce que Windows fera s'il y a une pression sur la mémoire disponible - vous le faites simplement plus tôt, avant que de telles demandes n'existent réellement.
Tous les détails se trouvent bien sûr dans le chapitre Gestion de la mémoire de Internes de Windows par Solomon, Russinovich et Ionescu.