Ich habe eine Windows Form-Anwendung. Wenn ich dem Formular dynamisch einige Schaltflächen hinzufüge und dann diese Schaltflächen lösche, entsteht ein Speicherleck.Dynamic steuert Speicherverlust
public partial class Form1 : Form
{
private Button[] buttons = new Button[1000];
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < 1000; i++)
{
var b = new Button();
Controls.Add(b);
buttons[i] = b;
}
for (int i = 0; i < 1000; i++)
{
Controls.Remove(buttons[i]);
buttons[i].Dispose();
buttons[i] = null;
}
}
}
Speichernutzung:
- Nach Formular geladen: 3720 KB
- Nach button1 klicken:. 5144 KB
(Diese Zahlen eine vollständige Garbage nach der Durchführung Sammlung aufgezeichnet Programm wurde ohne Debugger, Release-Build ausgeführt.)
Noch seltsamer, Unabhängig davon, wie oft button1_Click ausgeführt wird, bleibt die Speicherbelegung bei etwa 5100 KB. Was mache ich falsch?
Wenn der Speicher bei 5,1 mb bleibt, ist kein Speicherleck vorhanden. Ein Leck bedeutet typischerweise, dass es nicht an einem bestimmten Punkt anhält. – Mikanikal
Aber warum stieg die Speicherbelegung nach dem Hinzufügen und Entfernen der Steuerelemente? Das ist ziemlich komisch für mich. – jetstream96
Sie könnten versuchen, GC.Collect() 'zu callen. Versuchen Sie auch, einen _memory_ Profiler wie [ANTS Memory Profiler] (http://www.red-gate.com/products/dotnet-development/ants-memory-profiler) zu verwenden. –