2017-07-09 1 views
0

J'ai une zone de groupe nommée "radGroupBox1" dans laquelle je veux ouvrir un contrôle utilisateur. Voici mon code:Comment libérer de la mémoire après avoir effacé une Groupbox dans C#

radGroupBox1.Controls.Clear(); 

_main2 = new Forms.MainControl2(); 
radGroupBox1.Controls.Add(_main2); 
_main2.Dock = DockStyle.Fill; 
_main2.Frm = this; 
_main2.Show(); 

Mon problème est à chaque fois que j'exécute ce code, mon augmentation de la mémoire. Je le vérifie dans le gestionnaire de tâches. Par exemple, si vous cliquez 10 fois sur mon bouton (code d'exécution), la mémoire augmentera 10 fois. Comment puis-je libérer la mémoire allouée à l'objet précédent? Y a-t-il un moyen de l'éliminer ou de forcer le GC à libérer de la mémoire?

+0

Fermez-vous ('_main2.Close()') le formulaire quelque part? –

+0

@OfirWinegarten Où devrais-je faire ceci? – mosyflasher

+0

hmm ... je suppose au point où vous voulez fermer/cacher le contrôle de l'utilisateur. Aussi, pourquoi le recréer à chaque fois? pourquoi ne pas simplement cacher/montrer? Ce n'est pas tout à fait clair ce que vous faites –

Répondre

3

Comme vous pouvez le lire dans le documentation:

L'appel de la méthode Clear ne supprime pas les poignées de contrôle de la mémoire. Vous devez explicitement appeler la méthode Dispose pour éviter les fuites de mémoire.

Cela signifie que vous devez Dispose vous-même contrôler. Assurez-vous également que dans le contrôle utilisateur, vous disposez de toutes les ressources disponibles.

radGroupBox1.Controls.Clear(); 
_main2?.Dispose(); 
_main2 = new Forms.MainControl2(); 
radGroupBox1.Controls.Add(_main2); 
_main2.Dock = DockStyle.Fill; 
_main2.Frm = this; 
_main2.Show();