ASP.NET Tutorial/Cache/Introduction
Содержание
Basic operations executed on the ASP.NET Cache object
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs"
Inherits="Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Testing the Cache</title>
</head>
<body>
<div id="pageContent">
<form id="form1" runat="server">
<asp:Button ID="Button1" runat="server" Text="Add a new item..." OnClick="Add_Click" />
<asp:Button ID="Button2" runat="server" Text="Read the item..." OnClick="Read_Click" />
<asp:Button ID="Button3" runat="server" Text="Remove the item..." OnClick="Remove_Click" />
<hr />
<asp:Label runat="server" ID="Label1" />
</form>
</div>
</body>
</html>
File: Default.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class Default : System.Web.UI.Page
{
protected void Read_Click(object sender, EventArgs e)
{
string msg = String.Format("{0} ({1})",
Cache.Get("MyData"),
Cache.Get("MyData").GetType().ToString());
Label1.Text = msg;
}
protected void Add_Click(object sender, EventArgs e)
{
Cache["MyData"] = DateTime.Now;
}
protected void Remove_Click(object sender, EventArgs e)
{
object obj = Cache.Remove("MyData");
Label1.Text = obj.GetType().ToString();
}
}
Cache Object DataSource
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="CacheObjectDataSource" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Cached object data source</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="_peopleGridView" runat="server"
DataSourceID="_personObjectDataSource"
EnableViewState="False" />
<asp:ObjectDataSource ID="_personObjectDataSource" runat="server"
CacheDuration="120"
EnableCaching="True" SelectMethod="GetPeople" DataObjectTypeName="Person"
TypeName="SampleData" />
</div>
</form>
</body>
</html>
File: Default.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class CacheObjectDataSource : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Response.Output.Write("objds.GetHashCode() = {0}<br />", _personObjectDataSource.GetType().GetHashCode());
Response.Output.Write("objds.CacheDuration = {0}<br />", _personObjectDataSource.CacheDuration);
Response.Output.Write("objds.CacheExpirationPolicy = {0}<br />", _personObjectDataSource.CacheExpirationPolicy);
Response.Output.Write("objds.SqlCacheDependency = {0}<br />", _personObjectDataSource.SqlCacheDependency);
Response.Output.Write("objds.Typename = {0}<br />", _personObjectDataSource.TypeName);
Response.Output.Write("objds.SelctMethod = {0}<br />", _personObjectDataSource.SelectMethod);
}
}
File: Person.cs
using System;
using System.Data;
using System.Collections.Generic;
using System.Collections;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public class Person
{
private int _age;
private string _name;
private bool _isMarried;
private DateTime _birthDay;
public int Age
{
get { return _age; }
set { _age = value; }
}
public string Name
{
get { return _name; }
set { _name = value; }
}
public bool IsMarried
{
get { return _isMarried; }
set { _isMarried = value; }
}
public DateTime BirthDay
{
get { return _birthDay; }
set { _birthDay = value; }
}
public Person() { }
public Person(int age, string name, bool isMarried, DateTime birthDay)
{
_age = age;
_name = name;
_isMarried = isMarried;
_birthDay = birthDay;
}
}
public static class SampleData
{
public static ICollection<Person> GetPeople()
{
List<Person> ret = new List<Person>();
for (int i = 0; i < 10; i++)
ret.Add(new Person(i + 20, "Person " + i.ToString(), (i % 2) == 0,
DateTime.Now.AddYears(i-40)));
return ret;
}
}
Convert data in Cache to integer
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<br />
<asp:Label ID="Label1" runat="server" Width="147px"></asp:Label>
<br />
<br />
<asp:Button ID="Button1" runat="server" Text="Button" Width="98px" />
<br />
<br />
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br />
<br />
<asp:Table ID="Table1" runat="server" Height="88px" Width="166px">
</asp:Table>
<br />
<asp:Button ID="Button2" runat="server" Text="Button" Width="93px" /><br />
</div>
</form>
</body>
</html>
File: Default.aspx.vb
Partial Class _Default
Inherits System.Web.UI.Page
Private Property myCounter() As Integer
Get
Return CInt(Cache("myCounter"))
End Get
Set(ByVal Value As Integer)
Cache("myCounter") = Value
End Set
End Property
Private ReadOnly Property RowTexts() As ArrayList
Get
Dim al As ArrayList
al = CType(Cache("rowTexts"), ArrayList)
If IsNothing(al) Then
al = New ArrayList()
Cache("rowTexts") = al
End If
Return al
End Get
End Property
Private Sub AddARow(ByVal s As String)
Dim cell As New TableCell()
Dim row As New TableRow()
cell.Text = s
row.Cells.Add(cell)
Table1.Rows.Add(row)
End Sub
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
myCounter += 1
Label1.Text = myCounter.ToString()
End Sub
Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
RowTexts.Add(TextBox1.Text)
AddARow(TextBox1.Text)
End Sub
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim s As String
For Each s In RowTexts
AddARow(s)
Next
End Sub
End Class
Overview of Caching
The ASP.NET 3.5 Framework supports the following types of caching:
Page Output Caching caches an entire page.
Partial Page Caching caches only particular regions of a page.
DataSource Caching caches different ASP.NET DataSource controls such as the SqlDataSource and ObjectDataSource controls.
Data Caching caches arbitrary objects in memory.
Programmatic Fragment Caching
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="ProgrammaticFragmentCaching" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label runat="server" ID="_timestampLabel" EnableViewState="false" />
<hr />
</div>
</form>
</body>
</html>
File: Default.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class ProgrammaticFragmentCaching : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
_timestampLabel.Text = "This page generated at " + DateTime.Now.ToLongTimeString();
Response.Cache.SetExpires(DateTime.Now + new TimeSpan(0, 1, 0));
}
}