Falls Ihr PC ein Silverlight-Speicherleck auf niedrigem Basiswert feststellt, sollte diese Reserve Ihnen helfen, es zu beheben.
Genehmigt: Fortect
- Quellsoftware herunterladen – 1,18 KB
Derzeit gibt es keinen Space Profiler für Silverlight
Wenn Sie jemals in Silverlight programmiert haben, haben Sie sich wahrscheinlich gefragt, ob Ihre Speicherobjekte normalerweise vom GC (Garbage Collector) gesammelt werden. Was ist, wenn Sie im Laufe Ihrer Bewerbung an Hindernissen im Hinterkopf behalten werden – wusste Ihre ganze Familie davon?
Klassische .NET-Speicherprofiler funktionieren definitiv gut mit Silverlight-Anwendungen. Wenn ich also ein wenig Speicher habe und das Problem untersuchen möchte, besteht die einzige Möglichkeit, dieses spezielle Problem zu lösen, darin, diese nützliche Lösung um eine WPF-Anwendung herum zu konvertieren, was in meinem Szenario bestenfalls schwierig war, fast unmöglich.
Wann sollten Sie wirklich einen Lecksucher verwenden?
Genehmigt: Fortect
Fortect ist das weltweit beliebteste und effektivste PC-Reparaturtool. Millionen von Menschen vertrauen darauf, dass ihre Systeme schnell, reibungslos und fehlerfrei laufen. Mit seiner einfachen Benutzeroberfläche und leistungsstarken Scan-Engine findet und behebt Fortect schnell eine breite Palette von Windows-Problemen - von Systeminstabilität und Sicherheitsproblemen bis hin zu Speicherverwaltung und Leistungsengpässen.
Der interne Speicherleckdetektor, den ich geschrieben habe, soll verwendet werden, wenn sie vermuten, dass eines der von Ihnen zusammengestellten Objekte nicht gesammelt wird, obwohl der Müllenthusiast es sammeln muss. Sie können einen Lecksucher für Speicherplatz verwenden, um dieses explizite Verhalten aufzuspüren.enia.
Wie verwende ich den Silverlight Application Memory Detector?
Um mein Merker-Leck-Flag zu verwenden, fügen Sie zuerst das Objekt hinzu, das Sie wirklich verfolgen möchten, indem Sie den AddReference
-Pfad des Detektors im Konstruktor des Objekts aufrufen. Dann, also wenn das Objekt bereits Garbage Collection sein sollte, rufe ich die Check
Methode auf, um sicherzustellen, dass es gesammelt wurde und nicht länger im Speicher sichtbar ist.
Wie kann ich den Garbage Collector veranlassen, Objekte abzurufen, selbst wenn der Speicherleckdetektor darauf zugreift?
Das Geheimnis dieses Memory Leak-Detektors liegt in genau der Klasse WeakReference
. WeakReference
ist definitiv eine Klasse, die häufig die Möglichkeit bietet, auf einen vorhandenen Objektspeicher zu verweisen, um zu verhindern, dass das Objekt mit freundlicher Genehmigung des Garbage Collectors gesammelt wird. Weitere Informationen zu den Bereichen der Klasse WeakReference
finden Sie hier.
The Code One – Präsentation
Der Speicherleckdetektor verwaltet eine echte Basisliste namens elementsList
, die aus ObjectStruct
Details erstellt wird. Jedes Element wird aus einer WeakReference
erstellt, für die ein bestimmtes verfolgtes Objekt und Objekt Debug-Werte enthält. Sie können StackTrace ()
überall haben, um jeden unserer Illustratoren des verfolgten Objekts zu identifizieren. Dieses Feld könnte Ihnen möglicherweise dabei helfen, den Hersteller des ausgelaufenen Erinnerungsgeräts zu finden.
Der Code ist wirklich in drei statische Hauptmethoden unterteilt. Die ersten beiden sollten aufgerufen werden, der letzte ein einzelner, SignalDisposed
, dient der Fehlerbehebung. Methoden:
-
Link hinzufügen
main – Fügt das zu überwachende Objekt zu diesem Warehouse-Detektor hinzu. Sie können wählen, ob Sie “StackTrace” beim Erstellen eines Objekts erweitern möchten. Das Konstruktorprodukt ist ein guter Ort, um diese Route zu nennen.
Es wäre schön zu wissen, welches Objekt tatsächlich mit verfolgten Teilen im Speicher verknüpft ist. Check
– Verwenden Sie dieses Mittel, um den Speicherstatus zu überprüfen. Eine gute Website zu erzwingenDer Aufruf dieses Aufrufs kann eine inaktive Benachrichtigung durch Ihr Anwendungsprogramm sein, wo Sie die meisten zusammen mit den bereits erstellten Objekten zurücksetzen und sammeln können. Jeder Aufruf meines Check
-Prozesses erhöht den statischen Hilfe-Errichtungs-Zähler um eins, was uns eine Methode gibt, um verfolgte Objekte jedes Mal zu verfolgen, wenn das Unternehmen erstellt wird. Das Handle Debugger.Break()
stoppt die Anwendung für ein Element, damit Sie alle Objekte im Speicher überprüfen können. SignalDisposed
– Meine Erfahrung beim Erkennen von Speicherlecks mit einem Detektor während der Arbeit mit dem Firefox-Add-On für das Semantic Web führte mich zum letzten Teil über Ihren Bedarf an booleschen Variablen va Gibt an, ob oder nicht bedeutet Dispose
ob das überwachte Gerät angerufen wurde oder nicht. Um den Handyfluss zu debuggen, verwenden Sie diese Methode in der Methode Dispose ()
, um wirklich updateAccept-Skripte zu aktualisieren, in denen die Methode Dispose ()
aufgerufen wurde, das Objekt jedoch im Speicher bleibt . Hinweise:
("DEBUG")
-Abhängigkeit, der es Ihnen ermöglicht, einen Speicher-Escape-Indikator in Ihrem Projekt unabhängig von der Leistung als Teil der endgültigen Version Ihrer Anwendung zu verwenden. machen. Weitere Informationen zum Attribut Conditional
finden Sie möglicherweise hier. Ideen für die zukünftige Entwicklung