Quelle quantité de mémoire mon application Windows utilise-t-elle réellement?

J’ai un programme de mémoire de longue durée sur un programme expérimental, et j’aimerais connaître son empreinte mémoire réelle. Le Gestionnaire des tâches indique (dans Windows 7 64) que l’application consum 800 Mo de mémoire, mais que la quantité totale de mémoire allouée, également selon le gestionnaire de tâches, est de 3,7 Go. La sum de toute la mémoire allouée n’est pas égale à 3,7 Go. Comment puis-je déterminer, à la volée, la quantité de mémoire réellement consommée par mon application?

Corollaire: De quelle mémoire le gestionnaire de tâches fait-il état? Cela ne semble pas être toute la mémoire allouée à l’application elle-même.

    Si je comprends bien, le gestionnaire de tâches affiche le jeu de travail;

    set de travail: ensemble de pages de mémoire récemment touchées par les threads d’un processus. Si la mémoire disponible sur l’ordinateur dépasse un seuil, les pages restnt dans le jeu de travail d’un processus même si elles ne sont pas utilisées. Lorsque la mémoire disponible tombe en dessous d’un seuil, les pages sont supprimées de l’ensemble de travail.

    via http://msdn.microsoft.com/en-us/library/cc432779(PROT.10).aspx

    Vous pouvez également obtenir le Gestionnaire de tâches pour afficher la mémoire virtuelle.

    J’utilise habituellement perfmon (Démarrer -> Exécuter … -> perfmon) pour suivre l’utilisation de la mémoire, en utilisant le compteur Octets privés. Il reflète la mémoire allouée par vos allocateurs normaux (new / HeapAlloc / malloc, etc.).

    La mémoire est une chose délicate à mesurer. Une application peut réserver beaucoup de mémoire virtuelle mais ne l’utilise pas beaucoup. Une partie de la mémoire peut être partagée; c’est-à-dire qu’une DLL partagée peut être chargée dans l’espace adresse de plusieurs applications, mais uniquement dans la mémoire physique.

    Le jeu de travail , qui est l’ensemble des pages de son espace d’adressage virtuel auxquelles on a accédé récemment, constitue une bonne mesure. La signification de «accédé récemment» dépend du système d’exploitation et de son algorithme de remplacement de page . En d’autres termes, il s’agit de l’ensemble réel de pages virtuelles mappées sur la mémoire physique et actuellement utilisées. C’est ce que le gestionnaire de tâches vous montre.

    L’utilisation de la mémoire virtuelle correspond au nombre de pages virtuelles qui ont été réservées (notez que celles-ci n’auront pas toutes été validées, c’est-à-dire qu’un magasin de sauvegarde physique leur a été atsortingbué. Vous pouvez l’append à l’écran du gestionnaire de tâches en cliquant sur Afficher -> Sélectionner les colonnes .

    La chose la plus importante cependant : si vous voulez réellement mesurer la quantité de mémoire utilisée par votre programme pour voir si vous devez l’optimiser pour l’espace ou choisir de meilleures structures de données ou conserver certaines choses sur le disque, l’utilisation du gestionnaire de tâches est incorrecte. approche. Vous devriez certainement utiliser un profileur.

    Cela dépend de la mémoire dont vous parlez. Malheureusement, il existe différentes manières de mesurer la mémoire. Par exemple …

    • Mémoire physique allouée
    • Mémoire virtuelle allouée
    • Mémoire virtuelle réservée (mais non validée)
    • Octets privés
    • Octets partagés

    Quelle est la mésortingque qui vous intéresse?

    Je pense que la plupart des gens ont tendance à s’intéresser à la catégorie “Mémoire virtuelle”.

    Les statistiques de mémoire affichées par le gestionnaire de tâches ne sont pas presque toutes les statistiques disponibles, ni particulièrement bien présentées. J’utiliserais le formidable outil gratuit de Microsoft Sysinternals, VMMap , pour parsingr la mémoire utilisée par l’application.

    S’il s’agit d’une application longue durée et que l’utilisation de la mémoire augmente avec le temps, ce sera le tas qui augmentera. Certaines parties du tas peuvent être déplacées ou non sur le disque à tout moment, mais vous devez vraiment optimiser votre utilisation du tas. Dans ce cas, vous devez profiler votre application. S’il s’agit d’une application .Net, je peux recommander le profileur ANTS de Redgate. C’est très facile à utiliser. S’il s’agit d’une application native, le profileur Intel vtune est plutôt puissant. Vous n’avez pas besoin du code source pour le processus que vous profilez pour l’un ou l’autre de ces outils.

    Les deux applications ont un essai gratuit. Bonne chance.

    PS Je n’ai pas inclus plus de liens hypertextes vers les outils, mais ceci est mon premier post, et stackoverflow limite les premiers messages à un hyperlien 🙁