myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » GUI: WPF und XAML » Steigender Speicherverbrauch bei Seitenwechsel - Frame, Pages
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Steigender Speicherverbrauch bei Seitenwechsel - Frame, Pages

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
echdeneth echdeneth ist männlich
myCSharp.de-Mitglied

Dabei seit: 05.06.2019
Beiträge: 83
Entwicklungsumgebung: C# / Visual Studio 2017/19
Herkunft: Sachsen


echdeneth ist offline

Steigender Speicherverbrauch bei Seitenwechsel - Frame, Pages

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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:

C#-Code:
            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
06.01.2020 14:40 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.828
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
06.01.2020 15:39 Beiträge des Benutzers | zu Buddylist hinzufügen
echdeneth echdeneth ist männlich
myCSharp.de-Mitglied

Dabei seit: 05.06.2019
Beiträge: 83
Entwicklungsumgebung: C# / Visual Studio 2017/19
Herkunft: Sachsen

Themenstarter Thema begonnen von echdeneth

echdeneth ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Abt:
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.

Zitat von Abt:
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...
06.01.2020 16:02 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
MrSparkle MrSparkle ist männlich
myCSharp.de-Team

avatar-2159.gif


Dabei seit: 16.05.2006
Beiträge: 5.382
Herkunft: Leipzig


MrSparkle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von echdeneth:
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?

Zitat von echdeneth:
C#-Code:
(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.
06.01.2020 17:18 Beiträge des Benutzers | zu Buddylist hinzufügen
echdeneth echdeneth ist männlich
myCSharp.de-Mitglied

Dabei seit: 05.06.2019
Beiträge: 83
Entwicklungsumgebung: C# / Visual Studio 2017/19
Herkunft: Sachsen

Themenstarter Thema begonnen von echdeneth

echdeneth ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von MrSparkle:
Gibt es irgendwann eine OutOfMemoryException?

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

In Visual Studio, die Speicheranzeige

Zitat von MrSparkle:
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.
07.01.2020 09:05 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
MrSparkle MrSparkle ist männlich
myCSharp.de-Team

avatar-2159.gif


Dabei seit: 16.05.2006
Beiträge: 5.382
Herkunft: Leipzig


MrSparkle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von echdeneth:
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!

Zitat von echdeneth:
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

Zitat von echdeneth:
In der Berufsschule wird MVVM leider nicht drangenommen

Das kannst du auch nicht erwarten ;)

Zitat von echdeneth:
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 :)
07.01.2020 22:01 Beiträge des Benutzers | zu Buddylist hinzufügen
echdeneth echdeneth ist männlich
myCSharp.de-Mitglied

Dabei seit: 05.06.2019
Beiträge: 83
Entwicklungsumgebung: C# / Visual Studio 2017/19
Herkunft: Sachsen

Themenstarter Thema begonnen von echdeneth

echdeneth ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von MrSparkle:
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?
08.01.2020 11:19 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.828
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
08.01.2020 12:36 Beiträge des Benutzers | zu Buddylist hinzufügen
MrSparkle MrSparkle ist männlich
myCSharp.de-Team

avatar-2159.gif


Dabei seit: 16.05.2006
Beiträge: 5.382
Herkunft: Leipzig


MrSparkle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von echdeneth:
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.

Zitat von echdeneth:
gehören in das ViewModel, ist doch Sonnenklar!

Sagt wer?
08.01.2020 18:42 Beiträge des Benutzers | zu Buddylist hinzufügen
echdeneth echdeneth ist männlich
myCSharp.de-Mitglied

Dabei seit: 05.06.2019
Beiträge: 83
Entwicklungsumgebung: C# / Visual Studio 2017/19
Herkunft: Sachsen

Themenstarter Thema begonnen von echdeneth

echdeneth ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von MrSparkle:
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.
09.01.2020 09:21 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Coffeebean Coffeebean ist männlich
myCSharp.de-Team

avatar-3295.gif


Dabei seit: 25.08.2011
Beiträge: 2.197
Entwicklungsumgebung: VS 2005-2017, VS Code
Herkunft: Deutschland/Schweiz


Coffeebean ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo echdeneth,

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

Zitat:
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
09.01.2020 12:38 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.828
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top



Zitat von echdeneth:
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.
09.01.2020 14:24 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 4 Monate.
Der letzte Beitrag ist älter als 4 Monate.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 04.06.2020 08:57