3、共享用户控件的输出缓存
默认情况下,同一个用户控件在不同页面上的实例不共享相同的缓存。
希望跨页面缓存相同的用户控件的内容。需要指定<%@ OutputCache%>指定Shared特性。
SharedMovie.ascx
[code]
<%@ Control Language="C#" ClassName="Movies" %>
<%@ OutputCache Duration="600" VaryByParam="none" Shared="true" %>
<script runat="server">
</script>
User Control Time:
<%=DateTime.Now.ToString("T") %>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1">
<Columns>
<asp:BoundField DataField="id" HeaderText="id" InsertVisible="False" ReadOnly="True"
SortExpression="id" />
<asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" />
<asp:BoundField DataField="Director" HeaderText="Director" SortExpression="Director" />
<asp:BoundField DataField="DateReleased" HeaderText="DateReleased" SortExpression="DateReleased" />
<asp:BoundField DataField="Description" HeaderText="Description" SortExpression="Description" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
SelectCommand="SELECT * FROM [Movies]"></asp:SqlDataSource>
[/code]
4、以编程方式处理用户控件缓存
用户控件CachePloicy属性公开了一个ControlCachePolicy类的实例。
SlidingUserCache.ascx
[code]
<%@ Control Language="C#" ClassName="SlidingUserCache" %>
<%@ OutputCache Duration="10" VaryByParam="none" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
CachePolicy.SetSlidingExpiration(true);
CachePolicy.Duration = TimeSpan.FromMinutes(1);
}
</script>
User Control Time:
<% =DateTime.Now.ToString("T") %>
[/code]
5、创建用户控件缓存的文件依赖
CacheControlPolicy.Dependency属性在一个缓存了的用户控件和文件系统中的一个文件(或一组文件)间创建一个依赖。当文件被修改时,用户控件的缓存自动失效,并在下次页面被请求时重新生成。
MovieFileDependency.ascx
[code]
<%@ Control Language="C#" ClassName="MovieFileDependency" %>
<%@ OutputCache Duration="9999" VaryByParam="none" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
CacheDependency depend=new CacheDependency(MapPath("~/Movies.xml"));
this.CachePolicy.Dependency=depend;
}
</script>
User Control Time:
<%=DateTime.Now.ToString("T") %>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataSourceID="XmlDataSource1">
<Columns>
<asp:BoundField DataField="title" HeaderText="title" SortExpression="title" />
</Columns>
</asp:GridView>
<asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/Movies.xml">
</asp:XmlDataSource>
[/code]
ShowMovieFileDependency.aspx
[code]
<%@ Page Language="C#" %>
<%@ Register TagPrefix="movie" TagName="MovieFileDependency" Src="~/MovieFileDependency.ascx" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
Page Time:
<%=DateTime.Now.ToString("T") %>
<hr />
<movie:MovieFileDependency runat="server" />
</div>
</form>
</body>
</html>
[/code]
在Maxthon2中会出现更新Movie.xml刷新不立即更新的问题,Firefox没有这问题。
2011-5-30 21:17 danny
6、缓存动态载入的用户控件
可以使用Page.LoadControl()方法动态载入一个用户控件。
可以和声明在页面中的用户控件一样缓存动态载入的用户控件。
如果用户控件包括一个<%@OutputCache%>指令,则用户控件无论是用声明方式还是编程方式添加到页面的,它都会缓存。
P170
2011-5-30 21:21 danny
默认情况下,同一个用户控件在不同页面上的实例不共享相同的缓存。
希望跨页面缓存相同的用户控件的内容。需要指定<%@ OutputCache%>指定Shared特性。
SharedMovie.ascx
[code]
<%@ Control Language="C#" ClassName="Movies" %>
<%@ OutputCache Duration="600" VaryByParam="none" Shared="true" %>
<script runat="server">
</script>
User Control Time:
<%=DateTime.Now.ToString("T") %>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1">
<Columns>
<asp:BoundField DataField="id" HeaderText="id" InsertVisible="False" ReadOnly="True"
SortExpression="id" />
<asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" />
<asp:BoundField DataField="Director" HeaderText="Director" SortExpression="Director" />
<asp:BoundField DataField="DateReleased" HeaderText="DateReleased" SortExpression="DateReleased" />
<asp:BoundField DataField="Description" HeaderText="Description" SortExpression="Description" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
SelectCommand="SELECT * FROM [Movies]"></asp:SqlDataSource>
[/code]
4、以编程方式处理用户控件缓存
用户控件CachePloicy属性公开了一个ControlCachePolicy类的实例。
SlidingUserCache.ascx
[code]
<%@ Control Language="C#" ClassName="SlidingUserCache" %>
<%@ OutputCache Duration="10" VaryByParam="none" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
CachePolicy.SetSlidingExpiration(true);
CachePolicy.Duration = TimeSpan.FromMinutes(1);
}
</script>
User Control Time:
<% =DateTime.Now.ToString("T") %>
[/code]
5、创建用户控件缓存的文件依赖
CacheControlPolicy.Dependency属性在一个缓存了的用户控件和文件系统中的一个文件(或一组文件)间创建一个依赖。当文件被修改时,用户控件的缓存自动失效,并在下次页面被请求时重新生成。
MovieFileDependency.ascx
[code]
<%@ Control Language="C#" ClassName="MovieFileDependency" %>
<%@ OutputCache Duration="9999" VaryByParam="none" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
CacheDependency depend=new CacheDependency(MapPath("~/Movies.xml"));
this.CachePolicy.Dependency=depend;
}
</script>
User Control Time:
<%=DateTime.Now.ToString("T") %>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataSourceID="XmlDataSource1">
<Columns>
<asp:BoundField DataField="title" HeaderText="title" SortExpression="title" />
</Columns>
</asp:GridView>
<asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/Movies.xml">
</asp:XmlDataSource>
[/code]
ShowMovieFileDependency.aspx
[code]
<%@ Page Language="C#" %>
<%@ Register TagPrefix="movie" TagName="MovieFileDependency" Src="~/MovieFileDependency.ascx" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
Page Time:
<%=DateTime.Now.ToString("T") %>
<hr />
<movie:MovieFileDependency runat="server" />
</div>
</form>
</body>
</html>
[/code]
在Maxthon2中会出现更新Movie.xml刷新不立即更新的问题,Firefox没有这问题。
2011-5-30 21:17 danny
6、缓存动态载入的用户控件
可以使用Page.LoadControl()方法动态载入一个用户控件。
可以和声明在页面中的用户控件一样缓存动态载入的用户控件。
如果用户控件包括一个<%@OutputCache%>指令,则用户控件无论是用声明方式还是编程方式添加到页面的,它都会缓存。
P170
2011-5-30 21:21 danny