F:Speicherbelegung von Session/Application Elementen

04/12/2008 - 10:35 von B. Viehmann | Report spam
Hallo,

um die Zustànde innerhalb einer Session zu bewahren benutze ich auch
ganz gern die Speicherung von Objekten im Session-Cache.

Also sowas:
mySessionData = (SessionData)Session["mySessionData"];

Funktioniert sehr gut. Aber ich würde gern abschàtzen können wie viel
Speicher pro Objekt verbraten wird. Eine Abfrage der Objektgröße im
Cache zu Entwicklungszeit wàre schon schön.

Noch besser wàre aber einen Überblick über alle Objekte im
Application-Cache zur Laufzeit zu bekommen. ? ! ?

Außerdem ist es wohl so, dass die Daten bis zum Session Time Out im
Speicher bleiben (Standard 20 Minuten). Ist es sinnvoll die Objekte von
Hand auf Null zu setzen wenn der Anwender seinen Workflow beendet hat.

Also sowas:
Session["mySessionData"] = null;

Wann wird der Speicher dann aufgeràumt?


Danke im Voraus ;Gruß und Tschüß

Bernd
 

Lesen sie die antworten

#1 Stefan Falz [MVP]
06/12/2008 - 21:34 | Warnen spam
Hallo Bernd,

"B. Viehmann" schrieb:

um die Zustànde innerhalb einer Session zu bewahren benutze ich auch ganz gern die Speicherung von Objekten im Session-Cache.



ich hoffe, nicht zu überschwenglich. Das kann auf Dauer zu einem
Resourcenproblem führen, insbesondere, wenn die Anwendung öffentlich
zugànglich ist und bspw. Google und Co. sich die Anwendung mal "genauer"
anschauen.

Funktioniert sehr gut. Aber ich würde gern abschàtzen können wie viel Speicher pro Objekt verbraten wird. Eine Abfrage der
Objektgröße im Cache zu Entwicklungszeit wàre schon schön.



Wie willst Du das zur Entwicklungszeit machen!? Zur Entwicklungszeit
gibt es ja nicht mal eine Instanz, deren Größe Du auslesen könntest.
Die ungefàhre Größe ergibt sich ja aus dem Objekt, bzw. der dahinter-
liegenden Klasse(nstruktur). Welche Daten Du da einfügst und wie groß
das Objekt dann ist, kannst nur Du wissen.

Noch besser wàre aber einen Überblick über alle Objekte im Application-Cache zur Laufzeit zu bekommen. ? ! ?



For Counter As Int64 = 0 To Session.Count - 1
Result.Text &= Session.Keys( Counter ) & _
" / " & _
Session( Session.Keys( Counter ) )
Next

For Counter As Int64 = 0 To Application.Count - 1
Result.Text &= Application.Keys( Counter ) & _
" / " & _
Application( Application.Keys( Counter ) )
Next

Das funktioniert natürlich nicht so einfach mit Objekten, da musst Du
vorher schauen, was in der Session- oder Applicationvariablen eigentlich
drinsteckt.

Außerdem ist es wohl so, dass die Daten bis zum Session Time Out im Speicher bleiben (Standard 20 Minuten). Ist es sinnvoll die
Objekte von Hand auf Null zu setzen wenn der Anwender seinen Workflow beendet hat.



Wenn die Daten dann nicht mehr benötigt werden, Ja.

Wann wird der Speicher dann aufgeràumt?



Wenn der GarbageCollector der Meinung ist, er brauchts nicht mehr. Auf
jeden Fall ist es sinnvoller, nicht mehr benötigte Objekte zu entfernen.

Tschau, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

Ähnliche fragen