IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Connaitre la mémoire utlisée par l'application


Sujet :

C#

  1. #1
    Membre régulier Avatar de Onlava
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 92
    Points : 112
    Points
    112
    Par défaut Connaitre la mémoire utlisée par l'application
    Bonjour.

    Je dispose d'une application winforms dans laquelle je souhaite "monitorer"
    la mémoire que celle-ci utilise. Dans ma Form principale j'execute ce code suivant toutes les secondes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
      void DisplayMemory()
      {
                if (InvokeRequired)
                {
                    DelegateVoidVoid d = new DelegateVoidVoid(DisplayMemory);
                    try { Invoke(d); }
                    catch { }
                }
                else
                {
                    long mem = GC.GetTotalMemory(true)/1024;
                    int memKo = Convert.ToInt32(mem);
                    verticalProgressBar3.Value = memKo;
                }
      }
    Le problème est que le chiffre retourné (~500ko) ne correspond pas du tout à ce qu'indique le gestionnaire de tache windows (~16mo).
    J'imagine que cela est du au fait que mon application utilise différents threads et qu'ils ne sont pas pris en compte dans le total retourné.
    Donc ma question est :p
    Comment obtenir la mémoire utilisée par l'ensemble des threads de mon programme?

  2. #2
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Tu peux utiliser les compteurs de performance.

  3. #3
    Membre régulier Avatar de Onlava
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 92
    Points : 112
    Points
    112
    Par défaut
    Etrangement cela ne fonctionne pas sur ma machine. Dailleur le moniteur de perfs (outils d'admin) ne me propose aucun compteur.

    PerformanceCounterCategory.GetCategories() renvoie un tableau vide.

    suis-je grillé?

  4. #4
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    suis-je grillé?
    Non tu es cuis

    Juste au cas où, as tu bien mis dans ton code un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    using system.diagnostics;

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Points : 1 046
    Points
    1 046
    Par défaut
    Le GC est commun a tous tes threads, par contre il ne contient que les objets managés que tu as créé. Ce qui ne prend pas en compte les assemblies / dll elles mêmes, ni le code compilé dynamiquement de ces assemblies, ni les tailles des piles de tes threads, ni la mémoire réservée mais non utilisée, alors que le gestionnaire de tâches prend tout ça en compte.

  6. #6
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    using System;
    using System.Diagnostics;
     
    namespace ConsoleApplication5
    {
    	/// <summary>
    	/// Description résumée de Class1.
    	/// </summary>
    	class Class1
    	{
    		/// <summary>
    		/// Point d'entrée principal de l'application.
    		/// </summary>
    		[STAThread]
    		static void Main(string[] args)
    		{
    			//
    			// TODO*: ajoutez ici le code pour démarrer l'application
    			//
    			Process r = Process.GetCurrentProcess();
    			Console.WriteLine(r.NonpagedSystemMemorySize);
    			Console.WriteLine(r.PagedMemorySize);
    			Console.WriteLine(r.PagedSystemMemorySize);
    			Console.WriteLine(r.PeakPagedMemorySize);
    			Console.ReadLine();
    		}
    	}
    }
    Je viens de faire ce code, il me renvois des informations sur la mémoire concernant le processus courant. Je ne sais pas si cela peut t'aider.

  7. #7
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    salut

    Pour faire ce genre d'action, il est effectivement possible de passer par les performanceCounter... mais, j'ai trouvé, hier une méthode plus simple, elle vaut ce qu'elle vaut mais bon....

    Plutot que d'attaquer l'Api Win32 avec une methode genre GetGlobalStatus (ou memoryStatus), j'ai remarqué que dans l'assemblée VisualBasic,on avait
    accès à un objet My...

    Cet objet my, offre entre autre :

    My.Computer.Info.AvailablePhysMemory... et d'autres info ...

    Donc, je pense que cela pourra te permettre de "monitorer" l'utilisation mémoire de ton application...

    Seul inconvénient : Assembly Visual Basic à embarqué.. mais est-ce vraiment
    un problème ?

    The Monz, Toulouse

  8. #8
    Membre régulier Avatar de Onlava
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 92
    Points : 112
    Points
    112
    Par défaut
    Merci pour vos commentaires!

    Je crois que je vai opter pour la methode de ced600 qui à l'air de bien fonctionner.


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. afficher statut de la mémoire utilisée par l'application
    Par lakhdar16 dans le forum VBA Access
    Réponses: 2
    Dernier message: 03/05/2012, 11h14
  2. Connaitre la mémoire utilisée par un script
    Par Christophe Charron dans le forum Langage
    Réponses: 3
    Dernier message: 29/10/2009, 15h47
  3. Réponses: 2
    Dernier message: 01/10/2009, 11h00
  4. Connaitre la mémoire occupé par un objet
    Par Idrakis dans le forum Framework .NET
    Réponses: 6
    Dernier message: 25/06/2009, 14h02
  5. Taille mémoire occupée par mon application
    Par b_reda31 dans le forum C++Builder
    Réponses: 0
    Dernier message: 15/05/2008, 03h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo