Wie können Speicherverluste in Windows Store-Apps behoben werden?

8

Ich habe also eine .NET Windows Store App, die Speicher verliert. Was kann ich tun? Die Profiler-Tools, die ich für Desktop-Apps von jetBrains oder Red-Gate / ANTS verwendet habe, unterstützen Metro Apps nicht (oder jetzt?)

    
Filip Skakun 05.12.2012, 19:00
quelle

2 Antworten

12

Für den einfachsten Ansatz - gehen Sie nach unten, um mehr über die Beschreibung von Visual Studio 2013 zu erfahren.

Nun könnte es ein paar neue Werkzeuge geben - vielleicht etwas im aktualisierten Visual Studio und ich würde gerne darüber herausfinden, aber ich habe WinDbg zuvor mit einigem Erfolg versucht. Hier sind meine alten Notizen, wie man das macht:

%Vor%

Beachten Sie, dass wenn Sie x86 ausführen, insbesondere wenn Sie auf einer x64-Version von Windows laufen, Sie eine x86-Version des Debuggers verwenden müssen (WinDbg liefert beide Versionen), um den Speicherauszug zu speichern. SOS, eine Debugging-Erweiterung für verwaltete Speicher für WinDbg, unterstützt das Debuggen von x64-Bit-Dumps von x86-Bit-Prozessen nicht. Sie müssen dann auch den SOS-Pfad aktualisieren, so dass er wie folgt aussieht:

%Vor%

Möglicherweise sind nicht alle diese Befehle notwendig, aber das hat bei mir funktioniert.

Jetzt können Sie den Typ des Objekts finden, das anscheinend in zu vielen Fällen existiert

%Vor%

Dabei ist Typname nur der Name des Typs - kein vollständig qualifizierter Namespace erforderlich.

Jetzt können Sie überprüfen, was dieses Objekt im Speicher hält:

%Vor%

Das Live-Debugging funktionierte für mich nicht, da die App beim Anhängen eines Debuggers scheinbar angehalten wird. Ich denke, ich habe irgendwo eine Option gesehen, um die App im Speicher zu halten, aber ich habe vergessen, wo, aber für die Speicherprofilerstellung reicht es aus, wenn man sich eine statische Dump-Datei anschaut.

Sie können WinDbg als Teil des Windows SDK oder als eigenständigen Download von "Debugging Tools für Windows" von hier .

Um eine Dump-Datei zu erstellen, gehen Sie zum Task-Manager, klicken Sie mit der rechten Maustaste auf einen Prozess und wählen Sie "Dump-Datei erstellen".

Einige weitere Links:

Ссылка

Ссылка

Ссылка

Ссылка

Ссылка

* BEARBEITEN

Nach .NET-Speicherzuordnungs-Profiling mit Visual Studio 2012 von Stephen Toub - PerfView unterstützt die Analyse von Lecks in .NET Windows Store-Apps. Sehen Sie sich eine Artikel- und Video-Komplettlösung mit Vance Morrison an hier .

* EDIT 2

Visual Studio 2013 Preview fügt eine neue Option zum Analysieren von verwalteten Speicherhaufen aus Speicherabbilddateien hinzu. Um es zu tun - einfach pausieren Sie Ihre App im Visual Studio Debugger, speichern Sie Ihre aktuelle Dump über Debug / Save Dump As, dann wieder die Ausführung und verwenden Sie Ihre App, bis Ihr verdächtiges Leck passiert und machen Sie einen anderen Dump. Gehe dann zu Datei / Öffnen / Datei und öffne die zweite Dump-Datei. Auf der rechten Seite der Dump-Übersicht im Bereich "Aktionen" sehen Sie eine "Debug Managed Memory" -Aktion. Wählen Sie das aus und wählen Sie dann in "Select Baseline" Ihre erste Dump-Datei. Sie sehen eine Liste von Objekten auf dem verwalteten Heap, gruppiert nach Typ, mit count diffs. Beachten Sie, dass Sie in der Regel zuerst die Objekte mit geringen Zählungsdifferenzen, die nicht Null sind, betrachten, um eine einzelne Leckquelle zu verfolgen. Sie können in die Liste der Objekte bohren und sehen, was sie im Speicher hält, indem Sie die Struktur in der Referenzdiagrammansicht erweitern.

    
Filip Skakun 05.12.2012, 19:00
quelle
1

Telerik JustTrace unterstützt Windows Store Apps: Ссылка

    
kodefuguru 14.02.2013 07:25
quelle