Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Speicherfreigabe wenn UserControl von Panel entfernt wird
Falk82
myCSharp.de - Member



Dabei seit:
Beiträge: 7

Themenstarter:

Speicherfreigabe wenn UserControl von Panel entfernt wird

beantworten | zitieren | melden

Hallo Zusammen,

ich habe folgendes Problem.
Ich habe ein Windowsform mit zwei Buttons und einen Panel. Wenn Button 1 gedrückt wird, wird ein UserControl zu dem Panel hinzugefügt. Wenn Button 2 gedrückt wird, wird das UserControl wieder vom Panel entfernt und dispost.
Leider wird der Speicher der vom UserControl belegt wird nicht wieder freigegeben.
Wenn ich mit dem Diagnosetools eine Momentaufnahme des Speichers mache finde ich mein UserControl noch im Verwaltetem Speicher mit einen Versweis auf LayoutEventArgs.

Was kann ich machen das mein UserControl aus dem Speicher entfernt wird?

Hier noch mein SourceCode:

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        Control akt;

        public Form1()
        {
            InitializeComponent();
        }

       
        private void button1_Click(object sender, EventArgs e)
        {
            akt = new UserControl1();
            akt.Dock = DockStyle.Fill;
            akt.Name = "Test";
            this.panel1.Controls.Add(akt);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.panel1.Controls.Remove(akt);
            akt.Dispose();

            akt = null;
        }
    }
}
Als Anhang noch ein Screenshot der Momentaufnahme des Speichers.

Vielen Danke für Eure Hilfe.
Attachments
private Nachricht | Beiträge des Benutzers
ErfinderDesRades
myCSharp.de - Experte

Avatar #avatar-3151.jpg


Dabei seit:
Beiträge: 5.299

beantworten | zitieren | melden

jo, sehr eigentümlich.
LayoutEventArgs ist wie alle EventArgs eine Klasse mit normalerweise extrem kurzer Lebenszeit.

Dass das zu einem MemoryLeak führt ist entweder nicht richtig interpretiert, oder tatsächlich ein dicker Hund.

(my 5 ct)
Der frühe Apfel fängt den Wurm.
private Nachricht | Beiträge des Benutzers
MATSE01
myCSharp.de - Member



Dabei seit:
Beiträge: 19
Herkunft: Hamburg

beantworten | zitieren | melden

Du solltest "PerformLayout" hinzufügen:


this.panel1.Controls.Remove(akt);
akt.Dispose();
akt = null;
this.panel1.PerformLayout();


Danach sollte das Control aus dem LayoutEventArgs entfernt sein.
private Nachricht | Beiträge des Benutzers