Ich führe eine vollständige Code-Analyse für mein Projekt durch, und sie zeigt 500 Probleme an. Ich habe es jetzt auf 300 reduziert, aber ich habe mit einem Problem zu kämpfen, für das ich keine Lösung zu finden scheine.
Die Regel CA2000 Staaten:
Wenn ein Wegwerfobjekt nicht explizit entsorgt wird, bevor alle Verweise darauf aus dem Geltungsbereich verschwunden sind, wird das Objekt zu einem unbestimmten Zeitpunkt entsorgt, wenn der Garbage Collector den Finalizer des Objekts ausführt. Da ein außergewöhnliches Ereignis eintreten könnte, das die Ausführung des Finalizers des Objekts verhindert, sollte das Objekt stattdessen explizit entsorgt werden.
Weitere Informationen zu dieser Vorschrift finden Sie auf der oben verlinkten Seite.
Der Code, an dem die Regel scheitert, ist dieser:
internal Window(Game game, Control parent, string title, bool visible)
: base(game, parent, visible, new ScreenspaceRectangle(game, Color.Black, Vector.Zero, Vector.Zero))
{
}
Und die Beschreibung lautet:
CA2000 : Microsoft.Reliability : Rufen Sie in der Methode 'Window.Window(Game, Control, string, bool)' System.IDisposable.Dispose für das Objekt 'new ScreenspaceRectangle(game, Color.Black, Vector.Zero, Vector.Zero)' auf, bevor alle Verweise auf dieses Objekt aus dem Anwendungsbereich entfernt wurden.
Ich weiß, dass dieses Problem normalerweise durch die Verwendung einer "using"-Anweisung für das zu erstellende Objekt gelöst werden kann, um sicherzustellen, dass es immer ordnungsgemäß entsorgt wird. Aber wie kann ich das Problem in diesem Fall lösen?