缓存, 爱让人恨.有时候一个页面如果要实时更新的话 我们不得不舍掉缓存
但是 如果一个页面用了Substitution的话 效果就完全不同了 让人大可放心的去用缓存技术 再也不用担心不会及时更新了! 那什么是Substitution呢?
在google 词典中的意思是:代理,替换,交换 的意思 .顾名思义在Asp.net 控件中 如果用到缓存中 这个控件就意味着 是代替缓存的意思 就是说不 如果用了这个控件 实现了这个控件中的方法 这个对象中的信息就可以不缓存了. 说了这么多 那这个控件是怎样用的呢?
1. 先在页面中加上整页缓存
整页缓存的参数[必要的]:Duration 属性:页面或者是控件缓存的时间. 以秒为单位的.
Location 属性 :缓存地点 这个属性可以是:Any,Client,Downstream,None,Server,ServerAndClient
这些参数的意思: Any: 默认值 表示可以包括客户端浏览器、代理服务器或处理请求的服务器上。但是:包含在用户控件中的@ OutputCache指令不支持此属性 .Client 当然是将缓存放到客服端. Downstream 没有详细说明.None 不缓存 Server 缓存服务器端 ServerAndClient 将缓存放到服务器端和客服端
VaryByParam属性: 通俗点的说法是:如果将值放到这个属性里 就会让缓存失效.重新加载页面.
2.运用
前台:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ OutputCache Duration="40" Location="ServerAndClient" VaryByParam="none"; %>
<!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>SUBSTITUION运用</title>
</head>
<body>
<form id="form1" runat="server">
<div>这是用了缓存的时间:
<asp:Literal ID="litoldTime" runat="server"></asp:Literal>
<br />
这是用了SUBSTITUION后的效果
<asp:Substitution ID="Substitution" runat="server" MethodName="Get"/>
</div>
</form>
</body>
</html>
后台:
public partial class _Default : System.Web.UI.Page
{
/// <summary>
/// 加载事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Page_Load(object sender, EventArgs e)
{
this.litoldTime.Text = DateTime.Now.ToString();
}
/// <summary>
/// 动态加载的事件
/// </summary>
/// <param name="conect"></param>
/// <returns>要动态输出的内容</returns>
protected static string Get(HttpContext conect)
{
string str = DateTime.Now.ToString();
return str;
}
}
可能你也注意到了 在前台中:这是用了SUBSTITUION后的效果
<asp:Substitution ID="Substitution" runat="server" MethodName="Get"/> 其中有一个MethodName 的属性 值是="Get" 而在后台中有一个方法也是Get()
对: 就是在这个方法中实现对不缓存的内容做输出的.
思考:虽然页面的缓存中用一个很小的行为 但是对于数据库减少压力来说却是一个重要的一个方法让我们有更多的资源做别的事. 不要放过节约资源的行为 哪怕是一点.