Zwischenspeichern von Teilen einer ASP.NET-Seite

Aktualisiert: November 2007

Das Zwischenspeichern einer ganzen Seite ist manchmal unpraktisch, z. B. wenn sich Teile der Seite bei jeder Anforderung ändern. Für diesen Fall haben Sie die Möglichkeit, nur einen Teil der Seite zwischenzuspeichern. Als Verfahren stehen Ihnen dafür die Steuerelementzwischenspeicherung und die Postcacheersetzung zur Verfügung.

Mit der Steuerelementzwischenspeicherung, auch Fragmentzwischenspeicherung genannt, können Sie die Zwischenspeicherung auf bestimmte Teile der Seitenausgabe beschränken. Dabei werden für den Inhalt, der zwischengespeichert werden soll, Benutzersteuerelemente angelegt, und diese Benutzersteuerelemente werden dann für die Zwischenspeicherung markiert. So werden die ausgewählten Inhalte einer Seite zwischengespeichert, während die übrige Seite jedes Mal neu erstellt wird. Wenn Sie beispielsweise eine Seite erstellen, die größtenteils dynamischen Inhalt (z. B. Börseninformationen) anzeigt, aber auch statische Abschnitte (z. B. wöchentliche Zusammenfassungen) enthält, dann können Sie die statischen Abschnitte in Benutzersteuerelementen erstellen und die Benutzersteuerelemente für die Zwischenspeicherung konfigurieren.

Postcacheersetzung ist genau das Gegenteil. Die Seite wird zwischengespeichert, aber Teile der Seite sind dynamisch und sollen deswegen nicht zwischengespeichert werden. Wenn Sie beispielsweise eine Seite erstellen, die für einen festgelegten Zeitraum statisch bleibt, z. B. eine Seite mit Nachrichten, dann legen Sie zunächst die gesamte Seite für die Zwischenspeicherung fest. Auch wenn Sie der Seite nun wechselnde Werbebanner hinzufügen, ändern sich diese Banner zwischen den Seitenanforderungen nicht. Mit der Postcacheersetzung haben jedoch Sie die Möglichkeit, beim Zwischenspeichern einer Seite bestimmte Teile der Seite von der Zwischenspeicherung auszunehmen. Sie nehmen also die Werbebanner durch eine entsprechende Markierung von der Zwischenspeicherung aus. Damit werden die Werbebanner bei jeder Seitenanforderung dynamisch erstellt und der zwischengespeicherten Seitenausgabe hinzugefügt. Weitere Informationen über die Postcacheersetzung finden Sie unter Dynamisches Aktualisieren von Bereichen einer zwischengespeicherten Seite.

Zwischenspeichern von Benutzersteuerelementen

Durch das Zwischenspeichern von Inhalten mithilfe von Benutzersteuerelementen können Sie bestimmte Teilbereiche einer Seite, wie Datenbankabfragen, deren Erstellung erhebliche Prozessorzeit beansprucht, von anderen Seitenbereichen trennen. Die Bereiche der Seite, die weniger Serverressourcen beanspruchen, können für jede Anforderung dynamisch generiert werden.

Nachdem Sie die Seitenbereiche markiert haben, die zwischengespeichert werden sollen, und die Benutzersteuerelemente erstellt haben, die die einzelnen Bereiche enthalten, müssen Sie Richtlinien für die Zwischenspeicherung dieser Benutzersteuerelemente festlegen. Sie legen diese Richtlinien entweder deklarativ mit der @ OutputCache-Direktive fest, oder Sie verwenden dazu im Code für das Benutzersteuerelement die PartialCachingAttribute-Klasse.

Wenn Sie z. B. die folgende Direktive am Anfang einer Benutzersteuerelementdatei (ASCX-Datei) einfügen, wird eine Version des Steuerelements 120 Sekunden im Ausgabecache gespeichert.

<%@ OutputCache Duration="120" VaryByParam="None" %>

Um Zwischenspeicherungsparameter per Code festzulegen, können Sie in der Klassendeklaration des Steuerelements ein entsprechendes Attribut verwenden. Wenn Sie z. B. das folgende Attribut in die Metadaten der Klassendeklaration einfügen, wird eine Version des Inhalts für 120 Sekunden im Ausgabecache gespeichert.

[PartialCaching(120)]
public partial class CachedControl : System.Web.UI.UserControl
{
    // Class Code
}
<PartialCaching(120)> _
Partial Class CachedControl
    Inherits System.Web.UI.UserControl
    ' Class Code
End Class

Weitere Informationen zu den Attributen, die Sie für die Seitenausgabe festlegen können, finden Sie unter dem Thema @ OutputCache. Weitere Informationen zum Entwickeln von Benutzersteuerelementen finden Sie unter Übersicht über ASP.NET-Webserversteuerelemente.

Hinweis:

Genauso wie Sie Benutzersteuerelemente auf einer Seite ineinander schachteln können, lassen sich auch die Benutzersteuerelemente im Ausgabecache ineinander schachteln. Sie können die Cacheeinstellungen für die Seite und die ineinander geschachtelten Benutzersteuerelemente getrennt festlegen.

Programmgesteuertes Verweisen auf zwischengespeicherte Benutzersteuerelemente

Beim deklarativen Erstellen eines für die Zwischenspeicherung ausgewählten Steuerelements können Sie ein ID-Attribut einfügen, um programmgesteuert auf diese Instanz des Benutzersteuerelements zu verweisen. Bevor Sie im Code auf das Benutzersteuerelement verweisen, müssen Sie überprüfen, ob das Benutzersteuerelement im Ausgabecache vorhanden ist. Ein zwischengespeichertes Benutzersteuerelement wird nur bei der ersten Anforderung dynamisch generiert. Für alle nachfolgenden Anforderungen wird der Ausgabecache verwendet, bis die angegebene Zeit abgelaufen ist. Nachdem Sie festgestellt haben, dass das Benutzersteuerelement instanziiert wurde, können Sie das Benutzersteuerelement über die Seite, die dieses Steuerelement enthält, programmgesteuert ändern. Wenn Sie z. B. einem Benutzersteuerelement eine ID von SampleUserControl deklarativ zuweisen, dann können Sie mit dem folgenden Code überprüfen, ob das Benutzersteuerelement vorhanden ist:

protected void Page_Load(object sender, EventArgs e)
{
    if (SampleUserControl != null)
       // Place code manipulating SampleUserControl here.
}
Protected Sub Page_Load(ByVal sender As Object, _
        ByVal e As System.EventArgs) Handles Me.Load
    If SampleUserControl <> Nothing Then
       ' Place code manipulating SampleUserControl here.
    End If
End Sub

Unterschiedliche Zwischenspeicherungszeiten für Seite und Benutzersteuerelemente

Sie können für eine Seite und für die Benutzersteuerelemente dieser Seite unterschiedliche Zeiten für das Verbleiben im Ausgabecache festlegen. Wenn die Dauer des Ausgabecaches für die Seite größer ist als die Dauer des Ausgabecaches für das Benutzersteuerelement, hat die Angabe für die Seite Vorrang und gilt somit auch für das Benutzersteuerelement. Wenn die Zwischenspeicherung von Seitenausgaben z. B. auf 100 Sekunden und die Zwischenspeicherung der Benutzersteuerelementausgabe auf 50 Sekunden festgelegt ist, dann wird die gesamte Seite einschließlich des Benutzersteuerelements für 100 Sekunden im Ausgabecache gespeichert, unabhängig von der kürzeren Einstellung für das Benutzersteuerelement.

Das folgende Codebeispiel zeigt, wie es sich auswirkt, wenn die Dauer des Ausgabecaches für die Seite größer ist als die Dauer des Ausgabecaches für das Benutzersteuerelement. Die Seite ist so konfiguriert, dass Sie für 100 Sekunden zwischengespeichert wird.

<%@ Page language="C#" %>
<%@ Register tagprefix="SampleControl" tagname="Time" src="uc01.ascx" %>
<%@ OutputCache duration="100" varybyparam="none" %>

<SampleControl:Time  /><br /> <br /> <br />

This page was most recently generated at:<p>

<% DateTime t = DateTime.Now.ToString(); 
    Response.Write(t); %>
<%@ Page language="VB" %>
<%@ Register tagprefix="SampleControl" tagname="Time" src="uc01.ascx" %>
<%@ OutputCache duration="100" varybyparam="none" %>

<SampleControl:Time  /><br /> <br /> <br />

This page was most recently generated at:<p>
<% Dim t As DateTime = DateTime.Now.ToString()
Response.Write(t) %>

Das folgende Codebeispiel zeigt das Benutzersteuerelement der Seite. Die Cachedauer für das Steuerelement ist auf 50 Sekunden festgelegt.

<% @Control language="C#" %>
<% @OutputCache duration="50" varybyparam="none" %>

This user control was most recently generated at:<p>
<% DateTime t = DateTime.Now.ToString(); 
    Response.Write(t); %>
<% @Control language="VB" %>
<% @OutputCache duration="50" varybyparam="none" %>

This user control was most recently generated at:<p>
<% Dim t As DateTime = DateTime.Now.ToString()
Response.Write(t) %>

Wenn die Dauer des Ausgabecaches für die Seite jedoch kürzer ist als die Dauer des Ausgabecaches für das Benutzersteuerelement, wird das zwischengespeicherte Benutzerelement bis zum Ablaufen seiner Dauer verwendet, auch wenn der Rest der Seite für eine Anforderung neu generiert wird. Wenn z. B. das Zwischenspeichern für eine Seitenausgabe auf 50 Sekunden und das Zwischenspeichern für die Benutzersteuerelementausgaben auf 100 Sekunden festgelegt ist, läuft das Steuerelement nur einmal ab, während der Rest der Seite in derselben Zeit zweimal abläuft.

Das folgende Codebeispiel zeigt das Markup einer Seite mit einem Benutzersteuerelement, dessen Cachedauer länger ist die der Seite. Die Seite ist so konfiguriert, dass sie für 50 Sekunden zwischengespeichert wird.

<%@ Page language="C#" %>
<%@ Register tagprefix="SampleControl" tagname="Time" src="uc2.ascx" %>
<%@ OutputCache duration="50" varybyparam="none" %>

<SampleControl:Time  /><br /> <br /> <br />

This page was most recently generated at:<p>
 <% DateTime t = DateTime.Now.ToString(); 
    Response.Write(t); %>
<%@ Page language="VB" %>
<%@ Register tagprefix="SampleControl" tagname="Time" src="Uc2.ascx" %>
<%@ OutputCache duration="50" varybyparam="none" %>

<SampleControl:Time  /><br /> <br /> <br />

This page was most recently generated at:<p>
 <% Dim t As DateTime = DateTime.Now.ToString()
Response.Write(t) %>

Der folgende Code zeigt das Benutzersteuerelement der Seite. Die Cachedauer für das Steuerelement ist auf 100 Sekunden festgelegt.

<% @Control language="C#" %>
<% @OutputCache duration="100" varybyparam="none" %>

This user control was most recently generated at:<p>

<% DateTime t = DateTime.Now.ToString(); 
    Response.Write(t); %>
<% @Control language="VB" %>
<% @OutputCache duration="100" varybyparam="none" %>

This user control was most recently generated at:<p>
<% Dim t As DateTime = DateTime.Now.ToString()
Response.Write(t) %>

Siehe auch

Konzepte

Übersicht über das Zwischenspeichern in ASP.NET

Dynamisches Aktualisieren von Bereichen einer zwischengespeicherten Seite

Zwischenspeichern mehrerer Versionen einer Seite

Zwischenspeichern von Anwendungsdaten

Cachekonfiguration in ASP.NET

Weitere Ressourcen

Neues bei der ASP.NET-Zwischenspeicherung