Ja, Sie haben Recht, müssen Sie Bitmap
Objekt manuell entsorgen.
.NET Bitmap-Klasse „kapselt eine GDI + Bitmap“, das bedeutet, dass Sie Entsorgen auf einer Bitmap nennen sollten, wenn Sie mit ihm fertig sind,
immer Dispose aufrufen, bevor Sie den letzten Verweis auf das Bild freigeben . Andernfalls werden die Ressourcen, die es verwendet, nicht freigegeben, bis der Garbage Collector die Finalize-Methode des Image-Objekts aufruft.
Sie können dies einfach durch Überschreiben Dispose
Methode tun.
Das Problem mit WinForms ist jedoch, dass Ihr Formular eine partielle Klasse ist und es einen Teil YourForm.Designer.cs
gibt, der von Visual Studio automatisch generiert wird und bereits die Methode Dispose
zum Entsorgen von WinForms-Komponenten implementiert.
Sie müssen diese Methode zu Ihrem Code verschieben, lesen Sie mehr in this SO question.
Dann wird Ihre Methode wie folgt aussehen:
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (components != null)
{
components.Dispose();
}
mimg.Dispose(); // mimg should be global, of course
}
base.Dispose(disposing);
}
ich Sie es ausdrücklich nicht tun denken kann, aber der Garbage Collector wird dafür sorgen. In .NET, wenn die Objekte den Gültigkeitsbereich verlassen, werden sie dem Gabage Collector zugewiesen, der den Speicher automatisch freigibt. – null
Fügen Sie einfach einen FormClosed-Ereignishandler hinzu, und nennen Sie image1.Image.Dispose(). –