| 

.NET C# Java Javascript Exception

3
Gibt es die Möglichkeit den Arbeitsspeicher einer WPF-Application vom Benutzer einstellen zu lassen?
09.10.2009
Smoothie 51 1 3
2 Antworten
3
Prinzipiell kann man .NET-Anwendungen so gestallten, dass sie eine zugewiesene Speichergröße nicht überschreiten. Aber...

Auf den Speicherverbrauch des UI hast du, wie schon mein Vorredner klargestellt hat, keinen Einfluss. Ich hoffe du meinst die Anwendung an sich und nicht nur das UI.

Das ganze Konzept macht nur Sinn, wenn du asynchrone oder parallele Prozesse in deiner Anwendung verwendest. Den Speicherverbrauch dieser Prozesse kannst du durch Ermittlung der aktuelle WorkingSetSize des aktuellen Prozesses bestimmen. Erhalten kannst du diesen Wert aus der Eigenschaft WorkingSet64 der Process-Klasse aus dem System.Diagnostic Namensraum.
In deinen asynchronen oder parallelen Prozessen, fragst du nun die aktuelle WorkingSet-Größe ab und vergleichst sie mit der angegebenen max.-Größe. Wenn gleich oder größer, den Process beenden und den GC aufräumen lassen. Anschliesend die benötigten, und vom GC freigegebenen, Ressourcen neu initialisieren und neu starten.

Natürlich musst du die Benutzerangabe der zulässigen Speichergröße limitieren. Wenn der Benutzer einen zu kleinen Wert angiebt, weißt du ihn darauf hin und lässt die Eingabe des Wertes nicht zu. Genau so musst du mit einem zu großen Wert verfahren.
Die Richtwerte mußt du durch Tests ermitteln. Vor allem der Minimalwert solte nicht zu klein ausfallen, da du sonst durch permanente Neustarts der Prozesse oder Threads sehr viel Leistung einbüßt.

Das Konzept ist keine blanke Theorie. Ich habe genau dieses Konzept angewendet, als Jan und ich den Thumbscreator gebaut haben. Da war das Problem der permanent ansteigende Speicherverbrauch beim rendern der ScreenShots. Mit dem obigen Konzept haben wir das Problem erfolgreich in den Griff bekommen.
09.10.2009
klaus_b 1,6k 3 7
1
Wow, exzellente Erklärung klaus_b! Dafür gibt es doch glatt erstmal +1 :)
Dustin Klein 09.10.2009
0
Leider habe ich bisher nur sowas gefunden:

Der Workingset-Viewer ist ein WPF-Tool zur Leistungsanalyse, das Informationen zur Arbeitsspeichernutzung eines angegebenen Prozesses bereitstellt. Mithilfe dieses Tools können Sie einen Snapshot generieren, der Aufschluss über die Arbeitsspeichernutzung einer Anwendung zu einem bestimmten Anwendungszustand gibt. Weitere Informationen über WPF-Leistungstools finden Sie unter Tools für das Erstellen von WPF-Leistungsprofilen.

Optimieren der Leistung


Das betrifft nun aber nur den Entwickler und nicht den Endnutzer. Ich denke mal es geht dir darum, dass ein Benutzer angeben kann, wie viel Prozent des Arbeitsspeichers er für die Applikation bereitstellen will. Ich meine aber, dass WPF generell so wenig Speicher wie möglich verbraucht, da dies ja über diverse Prozeduren während des Debuggings gesteuert wird.

Ich denke auch, dass es zu Fehlern führen kann, wenn die Applikation nunmal 120 MB RAM braucht, der User aber ein Maximum von 64 MB eingestellt hat, da die Applikation ja auch Bestandteile des .NET Frameworks laden muss (Es sei denn es ist mit Programmen wie XENOCode vom .NET Framework unabhängig).
09.10.2009
Dustin Klein 2,9k 2 9
Genau, ich will es für den Enduser einstellbar machen. Bei SQL Server 200x ist es auch möglich solche Einstellugnen vorzunehmen und dort ist es auch sinnvoll.
Smoothie 09.10.2009
Dazu finde ich beim besten Willen leider auch nichts. Aber ich denke mal, es muss dafür ja eine Lösung geben...
Dustin Klein 09.10.2009
Die von dir angesprochene Einstellung im SQL Server ist etwas ganz anderes. Vereinfacht kann man diese Einstellung so erklären:
Der SQL arbeitet intern ähnlich der MMF(Memory Mapped File)-Technologie.
Mit Angabe der zu verwendenen Speichergröße im SQL, teilst du dem SQL mit, wie groß das reservierte Speichersegment sein sollte. Damit begrenzt der SQL den momentan geladenen Bereich der verwendeten DB's auf die angegebenen Größe. Was allerdings wesentlich mehr HDD-Zugriffe zur Folge hat.
klaus_b 09.10.2009

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH