Ich entwickle eine UWP-App für Windows 10. Ich habe ein Problem mit der Speicherverwaltung in meiner App. Ich habe eine SplitView
, deren Inhalt viele Bilder enthalten wird. Wenn der Benutzer auf ein Bild klickt, wird das Bild in voller Größe in den Bereich geladen. Ich registriere mich direkt bei vielen Click and Tapped Events in XAML. Wenn ich die Speicherbelegung überprüfe, steigt sie weiter und nach einem Punkt stürzt die App ab. Die Frage, die ich habe, ist, muss ich die Registrierung aller Ereignisse, die ich in XAML für die Freigabe von Speicher registrieren? Ich habe versucht, GC.Collect()
zu nennen, aber das löst das Problem nicht. Ich denke, dass es ein Speicherleck geben könnte. Es gibt mehrere Seiten in der App und wenn der Benutzer Schaltflächen außerhalb der SplitView
auswählt, ändert sich der Inhalt, und wie melde ich die Registrierung der auf dieser Seite registrierten Ereignisse ab, bevor der SplitView-Inhalt eine andere Seite erhält.Umgang mit Speicher in Universal Windows-Anwendungen in Windows 10
EDIT:
Die XAML für die ganze Seite mehr als 300 Zeilen sind, so kann ich es nicht hier einfügen. Aber die Ereignisse werden wie folgt registriert
<Button Name="Sample" Tapped="Sample_Tapped" Content="Sample Button" />
Die Seite wird jedes Mal neu erstellt. Es wird nicht zwischengespeichert. Ich habe einen Frame innerhalb des SplitView-Inhalts, der jedes Mal geändert wird, wenn der Benutzer den angezeigten Bildausschnitt ändern möchte.
MainFrame.Navigate(typeof(ImagePage),"SampleSection");
Wenn der Benutzer Abschnitt ändert, nenne ich den Garbage Collector
protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
{
GC.Collect();
}
Aber kein Speicher freigegeben wird.
Benötigt weitere Informationen. Wie registrieren Sie sich für die Veranstaltungen? Wird die Seite bei jedem Besuch neu erstellt? Tritt das Leck selbst dann auf, wenn der Benutzer auf der Seite bleibt, ohne sie erneut zu laden? – Stilgar
Ich habe weitere Informationen hinzugefügt. Verstehe, dass ich den ganzen Code nicht einfügen kann. Es ist zu lang. Ich weiß nicht, warum die Müllsammlung nicht funktioniert. –
Sie wissen, dass es Tools namens Memory Profiler gibt? Benutze einen von ihnen. Z.B. Ameisen Memory Profiler ist einer der am einfachsten zu bedienenden. PerfView ist ein kostenloser Profiler, der übrigens der Beste ist, aber eine hohe Lernkurve hat. –