Laden...

Speicherfreigabe wenn UserControl von Panel entfernt wird

Erstellt von Falk82 vor 7 Jahren Letzter Beitrag vor 7 Jahren 1.345 Views
F
Falk82 Themenstarter:in
7 Beiträge seit 2013
vor 7 Jahren
Speicherfreigabe wenn UserControl von Panel entfernt wird

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.

5.299 Beiträge seit 2008
vor 7 Jahren

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.

M
19 Beiträge seit 2012
vor 7 Jahren

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.