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

Windows Forms Discussion :

[C#] : Augmentation mémoire sur affichage d'un formulaire AboutBox


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 68
    Points : 66
    Points
    66
    Par défaut [C#] : Augmentation mémoire sur affichage d'un formulaire AboutBox
    Bonjour,

    Windows XP SP2
    Visual C# Express
    Framework 2.0
    Mon application Windows Form contient un formulaire utilisé comme un AboutBox, Ce formulaire affiche différentes informations :
    En voici le code :

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    public class FormAbout : System.Windows.Forms.Form
    {
    public FormAbout()
    	{
    	    // Intialisation des objets de la fenêtre
    	    InitializeComponent();
                // Récupération des informations de l'assembly
                LabelVersion.Text = Application.ProductName + " " +  
                Application.ProductVersion;
                LabelFrameWorkVersion.Text = Environment.Version.ToString(); 
                // Récupération de la mémoire allouée
                labelMemory.Text = string.Format("{0:D} 
                Ko",(Environment.WorkingSet/1024));
     
                // Récupératon des modules chargés {Nom, Version, Date}.
    	    try 
    	    {
    		    // Récupération de la liste des modules
    		    ArrayList ndocItems = new ArrayList();
    		    foreach (ProcessModule module in 
                        Process.GetCurrentProcess().Modules)
    		    {
    			    ListViewItem item = new ListViewItem();
    			    item.Text = module.ModuleName;
    			    // Récupération du N° de version
    			    FileVersionInfo verInfo = module.FileVersionInfo;
    			    string versionStr = String.Format("{0}.{1}.{2}.{3}", 
                                verInfo.FileMajorPart,
                                verInfo.FileMinorPart,
                                verInfo.FileBuildPart,
                                verInfo.FilePrivatePart);
     
                  		    item.SubItems.Add(versionStr);
    			    // Récupération de la date
    			    DateTime lastWriteDate =  
                                File.GetLastWriteTime(module.FileName);
    				   string dateStr = lastWriteDate.ToString("g");
    				    item.SubItems.Add(dateStr);
                                // Ajout de l'élément dans la liste
    			    assembliesListView.Items.Add(item);
    	   }
    	}
    	 catch (Exception ex)
    	 {
    	    MessageBox.Show(this, ex.ToString(), "Erreur sur la récupération des  
                 information des dépendances", MessageBoxButtons.OK, 
                  MessageBoxIcon.Error);
    	 }
      }
     
      protected override void Dispose( bool disposing )
      {
        if (disposing)
        {
    	    if (components != null)
        {
    	    components.Dispose();
        }
      }
      base.Dispose(disposing);
      }
         private void BtcClose_Click(object sender, EventArgs e)
            {
                this.Close();
            }
    	}
    Ce formulaire est affiché par l'intermédiaire d'un bouton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    private void btcViewAbout_Click(object sender, EventArgs e)
            {
                FormAbout lForm = new FormAbout();
                lForm.ShowDialog();
            }
    Question 1 : A chaque fois que j'affiche ce formulaire, la taille mémoire pour mon application augmente, de 100 à 350 Ko, est ce normal ?

    Question 2 : Je remarque que si je minimize dans la barre des taches mon application, et que je l'affiche à nouveau, la taille mémoire de mon application à considérablement diminuée !, Pourriez vous m'indiquer pourquoi ?

    J'ai pris ma fenêtre About comme exemple, mais celà e produit sur tous mes formulaires MDI également. et mon application passe de 15Mo au démarrage, à 98 Mo apres plusieurs ouverture de formulaire MDI qui contient des données sous forme de Chart.
    Et apres un minimize, l'application passe à 10Mo voir 12 Mo.

    Merci d'avance pour votre aide.
    Cldt,

  2. #2
    Membre habitué Avatar de Mourad
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 152
    Points : 161
    Points
    161
    Par défaut
    en fait ceci est dû à la gestion de la mémoire par le framework.
    moi aussi j'étais étonné de voir qu'une simple application hello world pouvait consommer énormément de Mo. Après quelques recherches sur le net j'ai fini par comprendre que ceci est dû à la gestion de la mémoire par le framework et donc finallement ton application ne consomme pas autant de mémoire mais juste que windows pense le contraire et affiche ce nombre énorme de Mo.
    Toutefois je ne suis pas tout à fait convaincu de ces explications trouvés sur le net car elles ne sont pas très claires.
    ceci est un grand problème pour vendre des logiciels, en effet le client en voyant ça dans son gestionnaire de tâches te dira que ton programme est mal foutu alors qu'il en est rien....
    MS devrait résoudre ce problème très rapidement, car les clients t'as beau leur expliquer des tas de trucs, sur le fonctionnement du framework et que c'est dû à ça etc... leur conclusion sera tjrs la même ton application c'est de la camelotte et elle bouffe beaucoup de mémoire...
    enfin pour conclure il y'a tjrs une astuce pour remédier à ce problème c'est de montrer un autre chiffre bidon à l'utilisateur (dans le gestionnaire de tâches), c'est pas honnête mais c'est faisable.

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

Discussions similaires

  1. [AC-2010] Doublons sur affichage d'un formulaire en mode édition
    Par ACNTOURAINE dans le forum Contribuez
    Réponses: 2
    Dernier message: 26/03/2015, 14h43
  2. [ZF 1.11] Débutant : aide sur affichage d'un formulaire de login
    Par Paul75 dans le forum MVC
    Réponses: 2
    Dernier message: 05/01/2011, 19h47
  3. bug sur affichage enregistrement dans formulaire
    Par Marcopololo dans le forum IHM
    Réponses: 3
    Dernier message: 20/08/2008, 09h10
  4. Réponses: 7
    Dernier message: 24/07/2006, 15h11
  5. affichage sur ouverture d'un formulaire
    Par DurDur dans le forum Access
    Réponses: 4
    Dernier message: 04/09/2005, 11h31

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