Ich wollte ein WPF-MVVM-Geschäftsanwendungs-Framework erstellen und stieß auf viele Artikel, wenn ich über Speicherlecks in der WPF-Plattform recherchierte.
Wenn Sie die Datenbindung in Windows Presentation Foundation verwenden, kann ein Speicherverlust auftreten
Vermeiden eines WPF-Speicherlecks mit DataBinding ( Black Magic)
Ernste Speicherlecks Plague WPF
Top 5 Speicherverluste in WPF und Silverlight
WPF Binding Bug führt zu möglichen Speicherproblemen
Aber die meisten von ihnen stammen aus den Jahren 2007 und 2008, also habe ich mich gefragt, welche von ihnen gelöst wurde und welche nicht.
Mit anderen Worten: Was sind die möglichen Ursachen für Speicherlecks (die möglicherweise auftreten), die beim Erstellen meines Frameworks berücksichtigt werden müssen oder auf die allgemein geachtet werden muss (WPF 4.0, .NET 4.0)?
Bearbeiten: Ich werde versuchen, genauer zu sein. Kann ich die WeakEventManager
und ihre Unterklassen zum Anhören nutzen? für Veranstaltungen ohne eigene Lösung zu entwickeln?
Bearbeiten 2: Noch spezifischer. Kann ich WeakEventManager
verwenden, um das Problem des Speicherlecks zu lösen, das durch Ereignisse in .NET im Allgemeinen und nicht nur durch WPF verursacht wird? Wenn ja, warum gehört es zu einem WPF-Namespace und nicht zu einem allgemeinen .NET-Namespace?
Das kommt mir zuerst in den Sinn:
Die Tatsache, dass Sie darüber nachdenken, bevor Sie beginnen, ist ein Plus, investieren Sie in einen guten MemoryProfiler und profilieren Sie Ihre App von Anfang an regelmäßig und Sie werden in Ordnung sein.
Bearbeiten: Um Ihre Änderungen zu kommentieren: Überprüfen Sie über Ihre Links Ich denke, Sie können drei Hauptthemen isolieren:
Was Ihre Bearbeitung in Bezug auf schwache Ereignisse angeht, könnte dies funktionieren. Persönlich würde ich diese gute Praxis nicht in Erwägung ziehen, da dies zu Situationen führen könnte, in denen Ihr Modell, das die Ereignisse anzeigt, bei denen Sie sich registrieren, früher aufgeräumt wird, als Sie es erwarten. Ich würde vorschlagen, die Extra-Meile zu gehen und bewusst Ihre Handler abmelden.