Laden...

Steigender Speicherverbrauch bei Seitenwechsel - Frame, Pages

Erstellt von echdeneth vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.327 Views
echdeneth Themenstarter:in
161 Beiträge seit 2019
vor 4 Jahren
Steigender Speicherverbrauch bei Seitenwechsel - Frame, Pages

Ich verwende die NuGet-Pakete von MaterialDesign.

Bei meinem Projekt habe ich ein Hauptfenster in dem im Wesentlichen nur das Frame und ein paar Buttons enthalten sind. Über ein Button lässt sich zwischen 2 Pages wechseln.
Nach jedem Wechsel steigt der Speicherverbrauch um ein paar MB, obwohl die Pages und alle Inhalte eigentlich gelöscht sein sollten. (KeepAlive=false)

Ich verstehe nicht warum. Der Projektcode ist auch zu groß um es hier zu posten.

Code für den Aufruf/Wechsel:


            if ((App.Current as App).MainWindowButtonReLief == "L")
            {
                Storyboard sb1 = FindResource("Dreh1") as Storyboard;
                sb1.Begin();
                if (sb1.GetCurrentState() == ClockState.Stopped)
                {
                    Lbl_ReLie.Content = "Rechnungen";
                    Pi_ReLief.Kind = MaterialDesignThemes.Wpf.PackIconKind.FormatListNumbered;

                    Storyboard sb2 = FindResource("Dreh2") as Storyboard;
                    sb2.Begin();

                    (App.Current as App).MainWindowButtonReLief = "R";
                    Frame.Navigate(new Lieferanten());
                }

Danke

"Man muß die Dinge so einfach wie möglich machen. Aber nicht einfacher." Albert Einstein

16.807 Beiträge seit 2008
vor 4 Jahren

Warum machst Du das nicht einfach über XAML?

So bist Du selbst in der Verantwortung Objekte zu disposen (was Du nicht tust), damit der Speicher aufgeräumt wird.

echdeneth Themenstarter:in
161 Beiträge seit 2019
vor 4 Jahren

Warum machst Du das nicht einfach über XAML?

Der Aufruf der Seiten? Ich nahm an dies wird im CodeBehind gemacht...
Ich schau mal wie das gemacht wird.

So bist Du selbst in der Verantwortung Objekte zu disposen (was Du nicht tust), damit der Speicher aufgeräumt wird.

Wie schon gesagt, hatte ich die Info das der Inhalt einer Page gelöscht wird wenn man diese verlässt. Aber wenn ich den Aufruf im CodeBehind mache muss ich alles manuell löschen(disposen?)?

Na lustig...

"Man muß die Dinge so einfach wie möglich machen. Aber nicht einfacher." Albert Einstein

5.657 Beiträge seit 2006
vor 4 Jahren

Nach jedem Wechsel steigt der Speicherverbrauch um ein paar MB, obwohl die Pages und alle Inhalte eigentlich gelöscht sein sollten.

Gibt es irgendwann eine OutOfMemoryException?

Wie hast du das denn überhaupt gemessen? Mit einem Profiler? Mit dem Taskmanager?

(App.Current as App).MainWindowButtonReLief = "R";  

So sollte man seinen Anwendungsstatus aber nicht steuern. Da gibt es wesentlich bessere Wege. Schau dir mal diesen Artikel an: [Artikel] MVVM und DataBinding.

Weeks of programming can save you hours of planning

echdeneth Themenstarter:in
161 Beiträge seit 2019
vor 4 Jahren

Gibt es irgendwann eine OutOfMemoryException?

Wie hast du das denn überhaupt gemessen? Mit einem Profiler? Mit dem Taskmanager?

In Visual Studio, die Speicheranzeige

So sollte man seinen Anwendungsstatus aber nicht steuern.

Ich weiss, dass das unsauber ist, hatte zu dem Zeitpunkt kaum eine Wahl, werde mal schauen ob es anders geht.

MVVM wäre mein Ziel und die Mutter aller Lösungen aber ich bekomme aber manche Dinge nicht hin. Wie z.B. einen SQL Query (incl. Pipapo) im ModelView.
Auch steigt der Speicherverbrauch stetig an (Weil ich das MV im CodeBehind aufrufen/instanzieren muss um Daten von MySQL darin zu speichern).
In der Berufsschule wird MVVM leider nicht drangenommen und Tutorials sind leider oft spezifisch, nicht Allgemein und verständlich.

"Man muß die Dinge so einfach wie möglich machen. Aber nicht einfacher." Albert Einstein

5.657 Beiträge seit 2006
vor 4 Jahren

Ich weiss, dass das unsauber ist, hatte zu dem Zeitpunkt kaum eine Wahl

Man hat immer eine bessere Wahl als "Magic Strings" mit kryptischen Bezeichnern in Eigenschaften mit kryptischen Bezeichnern zu speichern, an die man nicht ohne Casting kommt!

Wie z.B. einen SQL Query (incl. Pipapo) im ModelView.
Auch steigt der Speicherverbrauch stetig an (Weil ich das MV im CodeBehind aufrufen/instanzieren muss um Daten von MySQL darin zu speichern).

Datenbankzugriffe gehören überhaupt nicht in die View. Siehe dazu [Artikel] Drei-Schichten-Architektur

In der Berufsschule wird MVVM leider nicht drangenommen

Das kannst du auch nicht erwarten 😉

Tutorials sind leider oft spezifisch, nicht Allgemein und verständlich.

Wenn du etwas nicht verstehst, und trotzdem etwas lernen willst, kannst du gerne hier fragen. Dazu ist das Forum ja da 😃

Weeks of programming can save you hours of planning

echdeneth Themenstarter:in
161 Beiträge seit 2019
vor 4 Jahren

Datenbankzugriffe gehören überhaupt nicht in die View.

Ja, ich habe mich mißverständlich ausgedrückt. Ich meinte das ViewModel.

Auch wenn (je nach dem welches Tutorial) die einen sagen in etwa: "Logic und Datenbankzugriffe und Zeuchs gehören in das Model"
und die anderen: "... gehören in das ViewModel, ist doch Sonnenklar!" - janee, is nich klar...

Ist wohl wie die alte Frage: Beatles oder Rolling Stones?

"Man muß die Dinge so einfach wie möglich machen. Aber nicht einfacher." Albert Einstein

16.807 Beiträge seit 2008
vor 4 Jahren

MVVM ist ein sehr reifes Konzept, was die Architektur der Benutzeroberfläche behandelt.

MVVM ist aber kein Gesamtarchitekturkonzept einer Anwendung und gibt keine Regel vor, wo die Datenkommunikation erfolgt.
Das ist nicht Aufgabe von MVVM.

Prinzipiell ist alles, was Teil von MVVM ist, nur "UI" - alles.
Logik im Sinne von "Anwendungslogik" kann nicht Teil von MVVM sein, weil es dann in der UI liegen würde.
Siehe [Artikel] Drei-Schichten-Architektur
Mit MVVM greift man in solch einer Schicht-Architektur auch nur auf die anderen beiden (man kann auch mehr haben) Schichten zu.

Eine Software besteht i.d.R. aus mehreren Architektur-Pattern/Konzepten.
Auch der Vergleich ist unpassend, da es eben nicht nur zwei Wege gibt.

Wenn Du es sehr sehr sehr modern haben willst, dann verwendest Du MVVM zusammen mit Reactive Extensions.
ReactiveUI - The Zen of The ViewModel
Wenn Du aber das Grundkonzept von MVVM (Was ist es - und was ist es nicht?) noch nicht verinnerlicht hast, dann mag das mit ReactiveUI evtl etwas zuviel aktuell sein.

5.657 Beiträge seit 2006
vor 4 Jahren

Ja, ich habe mich mißverständlich ausgedrückt. Ich meinte das ViewModel.

Das ViewModel ist doch Teil der View (bzw. UI oder Präsentationsschicht).

Datenbankzugriffe gehören in die Datenzugriffsschicht (DAL), wie der Name schon sagt, und weder in die Präsentationsschicht, noch in die Businesslogik.

gehören in das ViewModel, ist doch Sonnenklar!

Sagt wer?

Weeks of programming can save you hours of planning

echdeneth Themenstarter:in
161 Beiträge seit 2019
vor 4 Jahren

Sagt wer?

Wie gesagt, je nach dem welches Tutorial man besucht. Ich beziehe mich bei MVVM auf Tutorial- und (YouTube)Video-Wissen und auf Beiträge in solchen Foren.

In jenen Tut's ist auch keine Rede von Präsentationschichten und dergleichen und was wo rein gehört.

Diese (die meisten...?) Informatiker sind leider oft mit einer Art Betriebsblindheit geschlagen und gehen in Erläuterungen von IHREM EIGENEN Kenntnisstand aus und implizieren diesen beim Lehrsuchenden.

"Man muß die Dinge so einfach wie möglich machen. Aber nicht einfacher." Albert Einstein

2.207 Beiträge seit 2011
vor 4 Jahren

Hallo echdeneth,

so ein Tutorial kann sicher gut sein, aber bitte versuche nicht alles mit MVVM zu erschlagen.

MVVM ist ein sehr reifes Konzept, was die Architektur der Benutzeroberfläche behandelt.

MVVM spielt sich sehr nah an der Oberfläche ab, es ist ein Konzept für die Oberfläche. Zu einer App gehört u.U. aber noch sehr viel mehr, wie etwa Datenzugriff. Der hat aber erstmal wenig mit MVVM zu tun. Der gehört in eine andere Schicht. MVVM ist ein Pattern von eventuell recht vielen innerhalb einer Applikation.

Aber wir schweifen vom Thema ab 😃 Lies dich in MVVM ein, die Links sind da, dann kannst du mit sauberem Erstellen und Abräumen von Controls deinen Speicherverbauch in den Griff bekommen.

Gruss

Coffeebean

16.807 Beiträge seit 2008
vor 4 Jahren

Diese (die meisten...?) Informatiker sind leider oft mit einer Art Betriebsblindheit geschlagen und gehen in Erläuterungen von IHREM EIGENEN Kenntnisstand aus und implizieren diesen beim Lehrsuchenden.

Sorry, aber die Aussage ist nicht fair.

Davon abgesehen, dass man immer nur vom eigenen Kenntnisstand ausgehen kann - ich kann schließlich schlecht was sagen, was ich nicht kenne - basieren die meisten Tutorials einfach auch aus Erfahrung.
Ja, der Wald von Tutorials hat ziemlich viele Bäume - aber das ist auch gut so.