How to cache in ASP.NET by using Visual C# .NET (323290)
The information in this article applies to:
- Microsoft ASP.NET (included with the .NET Framework 1.1)
- Microsoft ASP.NET (included with the .NET Framework) 1.0
- Microsoft Visual C# .NET (2003)
- Microsoft Visual C# .NET (2002)
This article was previously published under Q323290
For a Microsoft Visual Basic .NET version of this article, see 811431.
IN THIS TASKSUMMARYThis step-by-step article describes how to control the
caching of Web pages and data objects in ASP.NET. When you cache Web pages, you avoid
re-creating information when you make a later request. Caching is an important technique
for building high performance and scalable server applications. When you make the first
request for the page, you can store data objects, pages, or part of the page to the memory. You can store these items on a Web server, on a proxy server, or on the
browser. back to the
topMORE INFORMATIONASP.NET provides easier methods to control caching. You can
use the @ OutputCache directive to control page output caching in ASP.NET. Use the HttpCachePolicy class to store arbitrary objects, such as datasets, to server
memory. You can store the cache in applications such as the client browser, the proxy
server, and Microsoft Internet Information Services (IIS). By using the Cache-Control HTTP Header, you can control
caching.
For more information about ASP.NET output caching, click the following article number to view the article in the Microsoft Knowledge Base:
308375
How to control page output caching in ASP.NET by using Visual C# .NET
back to
the topCache ASP.NET pagesYou can use the @ OutputCache directive to cache, or
you can cache programmatically through code by using Visual Basic .NET or Visual C# .NET. The @ OutputCache directive contains a Location attribute. This attribute determines the location for cached
item. You can specify the following locations: - Any - This stores the output cache in the client's browser, on the proxy server (or any other server) that participates in the request, or on the server where the request is processed. By default, Any is selected.
- Client - This stores output cache in the client's browser.
- Downstream - This stores the output cache in any cache-capable devices (other than the origin server) that participate in the request.
- Server - This stores the output cache on the Web server.
- None - This turns off the output cache.
The following are code samples for the @ OutputCache directive and equivalent programmatic code. - To store the output cache for a specified duration
Declarative Approach:<%@ OutputCache Duration="60" VaryByParam="None" %> Programmatic Approach:Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
Response.Cache.SetCacheability(HttpCacheability.Public); - To store the output cache on the browser client where the request
originated
Declarative Approach:<%@ OutputCache Duration="60" Location="Client" VaryByParam="None" %> Programmatic Approach:Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
Response.Cache.SetCacheability(HttpCacheability.Private); - To store the output cache on any HTTP 1.1 cache-capable devices
including the proxy servers and the client that made request
Declarative Approach:<%@ OutputCache Duration="60" Location="Downstream" VaryByParam="None" %> Programmatic Approach:Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetNoServerCaching(); - To store the output cache on the Web server
Declarative Approach:<%@ OutputCache Duration="60" Location="Server" VaryByParam="None" %> Programmatic Approach:TimeSpan freshness = new TimeSpan(0,0,0,60);
DateTime now = DateTime.Now;
Response.Cache.SetExpires(now.Add(freshness));
Response.Cache.SetMaxAge(freshness);
Response.Cache.SetCacheability(HttpCacheability.Server);
Response.Cache.SetValidUntilExpires(true); - To cache the output for each HTTP request that arrives with a
different City:
Declarative Approach:<%@ OutputCache duration="60" varybyparam="City" %> Programmatic Approach:Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.VaryByParams["City"] = true; For the VaryByCustom attribute, the VaryByHeader attribute, and the VaryByParam attribute in the @ OutputCache directive, the HttpCachePolicy class provides the VaryByHeaders property and the VaryByParams property, and the SetVaryByCustom method. back to the topTurn off client and proxy cachingTo turn off the output cache for an ASP.NET Web page at the client location and at the proxy location, set the Location attribute value to none, and then set the VaryByParam value to none in the @ OutputCache directive. Use the following code samples to turn off client and proxy caching. back to the
top Cache arbitrary
objects in server memory ASP.NET includes a powerful, easy-to-use caching mechanism
that you can use to store objects that require a lot of server
resources to create in memory. The Cache class implements this method. Instances are private to each application and the lifetime is tied to the corresponding application. To cache the arbitrary objects in ASP.Net by using the Cache class, follow these steps: - Create a new ASP.NET Web Application by using Visual C# .NET.
- By default, WebForm1.aspx is created.
- In HTML view of WebForm1.aspx, replace the existing code with the following sample code:
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<html>
<script language="C#" runat="server">
void Page_Load(Object Src, EventArgs E) {
DataView Source;
// Retrieve the DataView object from Cache. If not exist, then add DataView object to the Cache.
Source = (DataView)Cache["MyDataSet"];
if (Source == null) {
SqlConnection myConnection = new SqlConnection("Server=ServerName; database=Pubs; user id=UID; password=PWD;");
SqlDataAdapter myCommand = new SqlDataAdapter("select * from Authors", myConnection);
DataSet ds = new DataSet();
myCommand.Fill(ds, "Authors");
Source = new DataView(ds.Tables["Authors"]);
Cache["MyDataSet"] = Source;
CacheMsg.Text = "Dataset created explicitly";
}
else {
CacheMsg.Text = "Dataset retrieved from cache";
}
// Binding the DataView object with DataGrid.
MyDataGrid.DataSource=Source;
MyDataGrid.DataBind();
}
</script>
<body>
<form method="GET" runat="server">
<h3><font face="Verdana">Caching Data</font></h3>
<ASP:DataGrid id="MyDataGrid" runat="server"
Width="700"
BackColor="#ccccff"
BorderColor="black"
ShowFooter="false"
CellPadding=3
CellSpacing="0"
Font-Name="Verdana"
Font-Size="8pt"
HeaderStyle-BackColor="#aaaad" />
<p>
<i><asp:label id="CacheMsg" runat="server"/></i>
</form>
</body>
</html>
Note Replace the values for ServerName, UID, and PWD in the sample code
for the SqlConnection object with your SQL Server Name, User ID, and
Password. - On the Debug menu, click Start to run the
application.
Note When you restart the application, the Cached object is re-created. back to the
topREFERENCES
For more information about the Cache-Control HTTP Header, click the following article number to view the article in the Microsoft Knowledge Base:
247404
How to modify the Cache-Control HTTP header when you use IIS
For more information, click the
following article numbers in the Microsoft Knowledge Base: 234067 How to prevent caching in Internet Explorer
311006 How to prevent Web caching in Windows 2000
247389 How to disable caching of specific MIME types
313561 How to set HTTP headers for content expiration in IIS
For more information, visit the following
Microsoft Web site: back to the top
Modification Type: | Major | Last Reviewed: | 7/29/2005 |
---|
Keywords: | kbHOWTOmaster kbWebForms kbCaching kbinfo KB323290 kbAudDeveloper |
---|
|