Galileo Computing < openbook >
Galileo Computing - Programming the Net
Galileo Computing - Programming the Net


Einstieg in ASP.NET von Matthias Lohrer
Einstieg in ASP.NET
gp Kapitel 15 Leistungssteigerung durch Caching
  gp 15.1 Ganze Seiten cachen
    gp 15.1.1 Formulare cachen
  gp 15.2 Teile von Seiten cachen
    gp 15.2.1 Benutzersteuerelemente cachen, die Formulare enthalten
  gp 15.3 Cache-Einstellungen mit der Klasse HttpCachePolicy programmgesteuert beeinflussen
  gp 15.4 Beliebige Daten und Objekte im Cache ablegen
  gp 15.5 Den Cache automatisch aktualisieren
    gp 15.5.1 Den Cache vom Inhalt einer XML-Datei abhängig machen
    gp 15.5.2 Weitere Möglichkeiten, den Cache abhängig zu machen
    gp 15.5.3 Den Cache über Prioritäten steuern
    gp 15.5.4 Reagieren, wenn ein Eintrag aus dem Cache gelöscht wird
  gp 15.6 Allgemeine Tipps zur Steigerung der Performance
  gp 15.7 Weiterführende Ressourcen


Galileo Computing

15.4 Beliebige Daten und Objekte im Cache ablegen  toptop

Jede Webanwendung verfügt über eine Instanz der Cache-Klasse. Dieses Objekt ist beispielsweise über die Cache-Eigenschaft jedes Page-Objekts erreichbar. In diesem Cache-Objekt können Sie Daten beliebigen Typs für einen bestimmten Zeitraum speichern. Sie können die gespeicherten Daten aktualisieren und wieder entfernen.


Achtung   In mancherlei Hinsicht funktioniert dieses Cache-Objekt damit so ähnlich wie die Application-Variablen. Der wesentliche Unterschied zwischen Application-Variablen und Cache-Variablen besteht darin, dass man sich auf die Existenz einer Cache-Variablen nie wirklich verlassen kann, denn es kann ja sein, dass sie in der Zwischenzeit aus dem Cache gelöscht wurde. Im Code kann eine Cache-Variable daher stets nur nach einer Überprüfung auf Existenz eingesetzt werden. Der Fall, dass die Cache-Variable nicht existiert, muss immer berücksichtigt werden, und in diesem Fall muss der Code über eine Alternative verfügen.

cache_07.aspx und cache_08.aspx demonstrieren ein Beispiel. Mit cache_07.aspx legt der Anwender mit Hilfe eines Formulars im applikationsweiten Cache-Objekt einen Wert unter dem Schlüssel »Topmeldung« ab. Dabei wird diesem Element eine Gültigkeit von zehn Sekunden mit auf den Weg gegeben. Außerdem bietet das Formular die Möglichkeit, den Cache zu leeren. cache_08.aspx ruft den Wert aus dem Cache ab oder gibt eine alternative Meldung aus, wenn kein entsprechender Wert mehr im Cache verfügbar sein sollte. Abbildung 15.6 zeigt die Darstellung im Browser.

Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 15.6 Einträge können für einen vordefinierten Zeitraum im Cache bleiben.

<!-- cache_07.aspx --> 
<%@ Page Language="VB" Debug="True" Strict="True" %>
<script runat="server">
Sub btnOK_Click _
              (Sender As Object, E As System.EventArgs)
   Cache.Insert("Topmeldung", _
                TopText.value, _
                Nothing, _
                DateTime.Now.AddSeconds(10), _
                TimeSpan.Zero)
   ausgabe.innerText = TopText.value
End Sub

Sub btnDelete_Click _
              (Sender As Object, E As System.EventArgs)
   Cache.Remove("Topmeldung")
   ausgabe.innerText = ""
   TopText.value=""
End Sub          
</script>
<html><head><title>
Das anwendungsweite Cache-Objekt nutzen</title></head>
<body>
<h3>Das anwendungsweite Cache-Objekt nutzen</h3>
<form runat="server" >
Topmeldung<br>
<p>Aktuell gespeichert: 
<span id="ausgabe" runat="server" /></p>
<input type="text" id="TopText" runat="server" 
       size="60">
<br>
<asp:Button runat="server" id="btnOK"
            OnClick="btnOK_Click" 
            Text="Meldung speichern" />
<br><br>
<asp:Button runat="server" id="btnDelete"
            OnClick="btnDelete_Click"
            Text="Meldung löschen" />            
</form>
<p>
<a href="cache_08.aspx">Zur Testseite cache_08.aspx</a>
</p></body></html>
<!-- cache_08.aspx --> 
<%@ Page Language="VB" Debug="True" Strict="True" %>
<script runat="server">
Dim t As String
Sub Page_Load (ByVal Sender As Object, _
               ByVal E As EventArgs)
   If (Cache("Topmeldung")) Is Nothing Then
      t = "Nix drin"
   Else 
      t = CType(Cache("Topmeldung"), String)
   End If
End Sub
</script>
<html>
<head><title>Das anwendungsweite Cache-Objekt
nutzen</title></head>
<body>
<h3>Das anwendungsweite Cache-Objekt nutzen</h3>
<p><% = t %></p>
</body></html>

Die Methoden Cache.Insert und Cache.Add arbeiten ähnlich. Beide fügen dem Cache einen Eintrag hinzu. Falls unter dem genannten Schlüssel bereits ein Eintrag vorhanden ist, wird dieser überschrieben. Auf diese Weise können Sie Cache-Einträge sehr einfach aktualisieren. Der Add-Methode müssen Sie in insgesamt sieben Parametern alle möglichen Informationen übergeben. Von der Insert-Methode gibt es demgegenüber einige überladene Varianten. Im einfachsten Fall übergeben Sie der Insert-Methode lediglich einen Schlüssel und das zu speichernde Objekt. cache_07.aspx verwendet in der Prozedur btnOK_Click einen Aufruf mit insgesamt fünf Parametern:

Cache.Insert("Topmeldung", _
             TopText.value, _
             Nothing, _
             DateTime.Now.AddSeconds(10), _
             TimeSpan.Zero)

Nach dem Schlüssel und dem zu speichernden Objekt nennt der dritte Parameter Cache-Abhängigkeiten. Dieses Thema wird in Abschnitt 15.5, den Cache automatisch aktualisieren, erläutert. Hier gibt es keine Cache-Abhängigkeiten, deswegen wird Nothing übergeben. Es folgt der Zeitpunkt, bis zu dem das Objekt im Cache bleiben soll, und anschließend ein Wert für einen gleitenden Ablauf. cache_07.aspx definiert eine fixe Ablaufzeit. Daher wird für den fünften Parameter der Wert TimeSpan.Zero übergeben.


Tipp   Der Parameter für die gleitende Ablaufzeit soll kurz erläutert werden. Mit Hilfe dieser Einstellung kann der Verbleib eines Objekts davon abhängig gemacht werden, wie oft es aufgerufen wird. Wenn hier beispielsweise drei Minuten eingestellt werden, dann bleibt das Objekt nach einem Aufruf für drei Minuten im Cache. Wenn es während dieser drei Minuten erneut aufgerufen wird, dann startet diese Frist neu. Im Prinzip kann auf diese Weise ein Objekt ewig im Cache bleiben, sofern es nur oft genug aufgerufen wird. Wenn das Objekt aber nur selten angefordert wird, wird es diese Frist irgendwann überschreiten und aus dem Cache gelöscht werden.

Die Prozedur btnDelete_Click löscht mit dem Befehl Cache.Remove("Topmeldung") den Eintrag aus dem Cache. Außerdem aktualisiert die Prozedur die Darstellung des Formulars.

cache_08.aspx überprüft zunächst, ob es einen Cache-Eintrag mit dem Schlüssel Topmeldung überhaupt gibt. Wenn nicht, wird der Text Nix drin verwendet. Wenn ein solcher Cache-Eintrag vorhanden ist, dann wird das gecachte Objekt durch Aufruf der Funktion CType zunächst in ein Objekt vom Typ String umgewandelt und das Ergebnis wird weiterverwendet.

   If (Cache("Topmeldung")) Is Nothing Then
      t = "Nix drin"
   Else 
      t = CType(Cache("Topmeldung"), String)
   End If

Sie können selbstverständlich nicht nur einfache Strings im Cache speichern, sondern Objekte jeder Art. Ein typischer Kandidat für den Cache sind Ergebnisse von Datenbankabfragen, weil diese relativ ressourcenaufwändig sind. Hier können Sie beispielsweise DataSet-Objekte ablegen.

  

Einstieg in VB.NET

VB.NET

Einstieg in C#

Visual C#

VB.NET und Datenbanken

Einstieg in XML




Copyright © Galileo Press GmbH 2003
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de