2010-03-18 6 views
1

Dans l'application que j'écris, j'utilise beaucoup de conteneurs de mémoire (conteneurs std C++ mais je ne pense pas que cela soit pertinent).Effet de l'utilisation de la mémoire VM élevée à court terme (Windows)

Lors d'une «tâche» de mon application, dans un cas d'utilisation intensive, l'utilisation de la mémoire privée des octets atteint 1 Go.

Juste comme un peu de contexte, cette tâche est une tâche initiée par l'utilisateur impliquant des fichiers de 100 000. Il est probable que l'utilisateur va le lancer et ensuite laisser la machine tourner.

(Et non, je ne fais rien de stupide comme charger des fichiers dans la mémoire - cette empreinte est toutes les métadonnées liées à la tâche en cours).

Pour la plupart des utilisateurs, l'utilisation de la mémoire au cours de cette tâche est négligeable - c'est juste le 1% des utilisateurs qui veulent faire 500 000 "choses" de 5000 "choses".

J'étais sur le point de me lancer dans un processus visant à déplacer d'une manière ou d'une autre une grande partie de cette substance en mémoire vers le disque, par ex. fichier de travail, DB incorporé. Mais alors j'ai pensé - "attendez une minute Toutes ces solutions sont essentiellement la mémoire cache sur le disque. N'est-ce pas ce que la mémoire virtuelle est pour?".

Je ne suis pas intéressé par la persistance de ces données - il s'agit uniquement de données temporaires/temporaires auxquelles j'ai besoin d'accéder pendant l'exécution de la tâche. Donc, ma question est: que dois-je faire?

Je ne veux pas faire de refactor majeur pour ce 1%, mais je veux connaître l'impact de l'exécution d'une application avec une empreinte mémoire aussi élevée.

Ai-je raison de dire que je ne serais probablement pas capable de faire beaucoup mieux que le gestionnaire Windows VM de toute façon?

Dans quelles conditions cela devient-il nocif? OK alors oui, si j'ai épuisé toute la mémoire réelle, alors il serait difficile de recharger les pages. Mais n'aurais-je pas de toute façon dans le cas si par exemple. une base de données intégrée?

Cheers,

John

Répondre

2

Oui, le gestionnaire de mémoire fera le travail pour vous. Non sans effets secondaires cependant, il va expulser des pages de RAM que d'autres processus ont cartographiées et vous les donner. Ces autres processus vont être ralentis par ceci, ils seront frappés avec une erreur de page quand ils accèdent à une telle page permutée. L'équation ici est de savoir si votre application est suffisamment "importante" pour justifier que ces autres processus ne soient pas mis au rancart. Habituellement, c'est Oui sur un poste de travail, un Non retentissant sur un serveur.