Caching ist eine Technologie, die häufig verwendete Daten/Informationen im Speicher speichert, sodass sie beim nächsten Mal, wenn dieselben Daten/Informationen benötigt werden, direkt aus dem Speicher abgerufen werden können, anstatt erneut von der Anwendung generiert zu werden.
Caching ist für die Verbesserung der ASP-Leistung sehr wichtig, da ASP-Seiten und -Steuerelemente dynamisch generiert werden. Dies ist äußerst wichtig für interaktionsbezogene Daten, bei denen die Reaktionszeit von entscheidender Bedeutung ist.
In Medien, auf die schnell zugegriffen werden muss, wie z. B. im Arbeitsspeicher eines Computers, werden häufig verwendete Daten in Caches abgelegt. Die ASP-Laufzeit enthält Schlüssel-Wert-Paare, die als zwischengespeicherte CLR-Objekte bezeichnet werden. Es befindet sich innerhalb der Anwendung und ist über HttpContext und System.Web.UI.Page verfügbar.
In mancher Hinsicht sind das Zwischenspeichern und Speichern von Zustandsobjekten ähnlich. Die im Statusobjekt gespeicherten Informationen sind jedoch deterministisch. Sie können beispielsweise die im Statusobjekt gespeicherten Daten berechnen, die zwischengespeicherten Daten sind jedoch nicht deterministisch.
Unter folgenden Umständen sind die Daten nicht verfügbar:
Wenn sein Lebenszyklus beendet ist,
Wenn die App ihren Speicher freigibt,
Wenn der Cache aus irgendeinem Grund nicht ersetzt wird.
Sie können einen Indexer verwenden, um auf Elemente im Cache zuzugreifen. Außerdem ist es möglich, die Lebensdauer von Objekten im Cache zu steuern und die Beziehung zwischen zwischengespeicherten Objekten und ihren physischen Ressourcen festzulegen.
ASP bietet die folgenden verschiedenen Cache-Typen:
Ausgabecache : Der Ausgabecache kann eine Kopie der zuletzt gerenderten Webseite oder einen Teil der an den Client gesendeten Seite speichern. Wenn der Client das nächste Mal die Seite anfordert, wird eine zwischengespeicherte Kopie der Seite an den Client gesendet, anstatt die Seite neu zu generieren, was Zeit spart.
Daten-Caching : Daten-Caching bezieht sich auf das Zwischenspeichern von Daten aus der Datenquelle. Solange der Cache nicht ersetzt wurde, werden die Daten bei erneuter Anforderung aus dem Cache abgerufen. Beim Ersetzen des Caches werden neue Daten von der Datenquelle geholt und der Cache wird wieder gefüllt.
Objektcache : Der Objektcache dient zum Zwischenspeichern von Seitenobjekten, z. B. datengebundenen Steuerelementen usw. Zwischengespeicherte Daten werden im Speicher des Servers abgelegt.
Klassen-Caching : Wenn eine Webseite oder ein Webdienst zum ersten Mal ausgeführt wird, werden die kompilierten Seitenklassen zusammengestellt. Die Assembly wird dann auf dem Server zwischengespeichert. Wenn die Seite oder der Dienst das nächste Mal angefordert wird, wird die zwischengespeicherte Assembly verwendet. Wenn der Quellcode geändert wird, kompiliert die CLR die Assembly neu.
Konfigurationscache : Anwendungskonfigurationsinformationen werden in einer Konfigurationsdatei gespeichert. Der Konfigurationscache speichert Konfigurationsinformationen im Serverspeicher.
In diesem Tutorial betrachten wir Ausgabe-Caching, Daten-Caching und Objekt-Caching.
Das Rendern einer Seite kann einige komplexe Prozesse umfassen, z. B. Datenbankzugriff, Rendern komplexer Steuerelemente usw. Durch das Ausgabe-Caching können Roundtrips zum Server umgangen werden, indem Daten im Speicher zwischengespeichert werden. Sogar die gesamte Seite kann zwischengespeichert werden.
Die OutputCache-Direktive ist für das Ausgabe-Caching verantwortlich. Es ermöglicht das Zwischenspeichern der Ausgabe und bietet ein gewisses Maß an Kontrolle über sein Verhalten.
Syntax der OutputCache-Direktive:
<%@ OutputCache Duration="15" VaryByParam="None" %>
Platzieren Sie diese Anweisung unter der Seitenanweisung. Dadurch wird der Umgebung mitgeteilt, dass die Seite 15 Sekunden lang zwischengespeichert werden muss. Der folgende Seitenlade-Ereignishandler hilft bei der Bestätigung, ob die Seite zwischengespeichert wurde.
protected void Page_Load(object sender, EventArgs e){ Thread.Sleep(10000); Response.Write("Diese Seite wurde generiert und zwischengespeichert bei:" + DateTime.Now.ToString());}
Die Thread.Sleep()- Methode stoppt den Prozess für einen bestimmten Zeitraum. In diesem Beispiel wird der Thread für 10 Sekunden angehalten, sodass der erste Download der Seite 10 Sekunden dauert. Wenn Sie die Seite das nächste Mal aktualisieren, dauert es jedoch nicht lange, da die Seite bereits aus dem Cache abgerufen wurde und nicht erneut heruntergeladen wird.
Die OutputCache-Direktive verfügt über die folgenden Funktionen, um das Verhalten des Ausgabecaches zu steuern:
Eigentum | Wert | beschreiben |
---|---|---|
DiskCacheable | wahr/falsch | Beschreibt, ob die Ausgabe mit Cache auf die Festplatte geschrieben werden kann. |
NoStore | wahr/falsch | Beschreibt, ob der Cache-Header „no store“ gesendet wird. |
CacheProfile | Stringname | Der Name der in web.config gespeicherten Cache-Konfigurationsdatei. |
VaryByParam | Keine*Parametername | Verwenden Sie durch Semikolons getrennte Zeichenfolgenwerte in GET-Anfragen oder Variablenwerte in POST-Anfragen. |
VaryByHeader | *Header-Dateiname | Könnte eine durch Semikolons getrennte Zeichenfolge sein, die vom Client übermittelte Header angibt. |
VaryByCustom | Benutzerdefinierte Zeichenfolge des Browsers | Benachrichtigen Sie ASP.NET über Änderungen am Ausgabecache über die Version des Browsernamens oder die Clientzeichenfolge. |
Standort | Jeder Client-Download-Streaming-ServerKeine | Beliebig: Die Seite kann überall zwischengespeichert werden. Client: Der zwischengespeicherte Inhalt ist im Browser enthalten. Download-Stream: Der zwischengespeicherte Inhalt wird im Download-Stream und auf dem Server gespeichert. Server: Der Cache wird nur auf dem Server gespeichert. Keine: Es ist kein Caching zulässig. |
Dauer | Nummer | Die Anzahl der Sekunden, die eine Seite oder ein Vorgang zwischengespeichert werden soll. |
Fügen wir dem vorherigen Beispiel ein Textfeld und eine Schaltfläche hinzu und fügen einen Ereignishandler für diese Schaltfläche hinzu.
protected void btnmagic_Click(object sender, EventArgs e){ Response.Write("<br><br>"); Response.Write("<h2> Hallo, " + this.txtname.Text + "</h2>") ;}
Ändern Sie die OutputCache-Direktive:
<%@ OutputCache Duration="60" VaryByParam="txtname" %>
Wenn das Programm ausgeführt wird, speichert ASP die Seite basierend auf dem Namen im Textfeld zwischen.
Der Hauptaspekt des Datencachings ist das Caching der Datenquellensteuerung. Wir haben Datenquellensteuerelemente besprochen, die Daten aus einer Datenquelle darstellen, beispielsweise einer Datenbank oder einer XML-Datei. Diese Steuerelemente werden von der abstrakten Klasse DataSourceControl abgeleitet und verfügen über die folgenden geerbten Eigenschaften für das Caching:
Cache-Zeitraum: Die Zeit, die die Datenquelle zum Zwischenspeichern von Daten benötigt.
Cache-Ablaufrichtlinie – definiert das Verhalten des Caches, wenn Daten im Cache ablaufen.
Cache-Wertabhängigkeit – definiert einen Kontrollwert, der die Daten automatisch aus dem Cache verschiebt, wenn sie ablaufen.
Caching aktivieren – Sie können bestätigen, ob Daten zwischengespeichert werden.
Um das Daten-Caching zu demonstrieren, erstellen wir eine neue Website und fügen ihr ein neues Webformular hinzu. Fügen Sie der Datenbank ein SqlDataSource-Steuerelement hinzu, das eine Verbindung zum Tutorial zum Datenzugriff herstellt.
In diesem Beispiel fügen wir der Seite eine Beschriftung hinzu, die die Reaktionszeit der Seite anzeigt.
<asp:Label ID="lbltime" runat="server"></asp:Label>
Abgesehen von diesem Tag entspricht die gesamte Seite dem Tutorial zum Datenzugriff. Fügen Sie dieser Seite einen Ereignishandler hinzu, um die Uhrzeit herunterzuladen.
protected void Page_Load(object sender, EventArgs e){ lbltime.Text = String.Format("Seite gepostet unter: {0}", DateTime.Now.ToLongTimeString());}
Die gestaltete Seite sollte so aussehen:
Wenn Sie die Seite zum ersten Mal ausführen, passiert nichts anderes. Etikettenanzeige: Bei jeder Aktualisierung der Seite wird die Seite neu geladen und die Zeitänderung wird auf dem Etikett angezeigt.
Als nächstes setzen Sie die Eigenschaft „EnableCaching“ des Datenquellen-Steuerelements auf „true“ und die Eigenschaft „Cacheduration“ auf „60“. Es wird Caching implementiert und der Cache läuft alle 60 Sekunden ab.
Bei jeder Aktualisierung ändert sich der Zeitstempel. Wenn Sie jedoch die Daten in der Tabelle innerhalb von 60 Sekunden ändern, werden diese erst angezeigt, wenn der Cache abgelaufen ist.
<asp:SqlDataSource ID = "SqlDataSource1" runat = "server" ConnectionString = "<%$ ConnectionStrings: ASPDotNetStepByStepConnectionString %>" ProviderName = "<%$ ConnectionStrings: ASPDotNetStepByStepConnectionString.ProviderName %>" SelectCommand = "SELECT * FROM [DotNetReferences]" EnableCaching = „true“ CacheDuration = "60"> </asp:SqlDataSource>
Das Objekt-Caching bietet eine größere Flexibilität als andere Caching-Technologien. Sie können Objekt-Caching verwenden, um beliebige Objekte im Cache zu platzieren. Objekte können auch von beliebigem Typ sein – Datentypen, Netzwerksteuerungen, Klassen, Dateneinstellungsobjekte usw. Diese Elemente können dem Cache hinzugefügt werden, indem ihnen einfach ein Wertname zugewiesen wird, wie unten gezeigt:
Cache["key"] = item;
Um Objekte in den Cache einzufügen, stellt ASP die Methode Insert() zur Verfügung. Es gibt vier überladene Versionen dieser Methode. Werfen wir einen Blick darauf:
Überlast | beschreiben |
---|---|
Cache.Insert((key, value); | In Form von Schlüssel-Wert-Paaren in den Cache einfügen, wobei Priorität und Lebenszyklus die Standardeinstellung sind. |
Cache.Insert(key, value, dependencies); | Fügen Sie den Cache als Schlüssel-Wert-Paare mit Standardprioritäten und -lebensdauern sowie mit anderen Dateien oder Inhalten verknüpften Cache-Abhängigkeiten in den Cache ein, sodass Cache-Änderungen nicht länger eingeschränkt sind. |
Cache.Insert(key, value, dependencies, absoluteExpiration, slideExpiration); | Geben Sie den Gültigkeitszeitraum der obigen Konfiguration an. |
Cache.Insert(Schlüssel, Wert, Abhängigkeiten, absoluteExpiration, gleitendesExpiration, Priorität, onRemoveCallback); | Neben der Konfiguration ermöglicht es auch das Festlegen der Priorität des zwischengespeicherten Inhalts und der Delegation, wodurch eine Methode angegeben wird, die aufgerufen werden soll, wenn ein Objekt entfernt wird. |
Der dynamische Lebenszyklus wird verwendet, um ein Cache-Element zu entfernen, das für einen bestimmten Zeitraum nicht gültig ist. Der folgende Codeausschnitt speichert ein abhängigkeitsfreies Cache-Element mit einer gleitenden Lebensdauer von 10 Minuten:
Cache.Insert("my_item", obj, null, DateTime.MaxValue, TimeSpan.FromMinutes(10));
Erstellen Sie eine Seite mit nur einer Schaltfläche und einer Beschriftung. Schreiben Sie den folgenden Code in das Seitenladeereignis:
protected void Page_Load(object sender, EventArgs e){ if (this.IsPostBack) { lblinfo.Text += "Seite zurückgesendet.<br/>" } else { lblinfo.Text += "Seite erstellt.<br/> "; } if (Cache["testitem"] == null) { lblinfo.Text += "Testelement wird erstellt.<br/>"; DateTime testItem = DateTime.Now; lblinfo.Text += "Testelement im Cache speichern"; lblinfo.Text += "für 30 Sekunden.<br/>"; Cache.Insert("testitem", null, DateTime.Now.AddSeconds (30), TimeSpan.Zero); } else { lblinfo.Text += "Testelement abrufen.<br/>"; = (DateTime)Cache["testitem"]; lblinfo.Text += "Testelement ist: " + testItem.ToString(); lblinfo.Text += "<br/>" } lblinfo.Text += "<br />";}
Wenn die Seite zum ersten Mal geladen wird, wird Folgendes angezeigt:
Seite erstellt. Testelement wird erstellt. Testelement wird 30 Sekunden lang im Cache gespeichert.
Wenn Sie innerhalb von 30 Sekunden erneut auf die Schaltfläche klicken, obwohl die Seite gelöscht ist, ruft das Label-Steuerelement die Informationen aus dem Cache ab, wie unten gezeigt:
Zurückgemeldete Seite. Testelement wird abgerufen. Testelement ist: 14-07-2010 01:25:04