zoukankan      html  css  js  c++  java
  • asp.net缓存(一)

    ASP.NET页面输出缓存(OutputCache)

      页面输出缓存是最为简单的缓存机制,该机制将整个ASP.NET页面内容保存在服务器内存中。当用户请求该页面时,系统从内存中输出相关数据,直到缓存数据过期。在这个过程中,缓存内容直接发送给用户,而不必再次经过页面处理生命周期。通常情况下,页面输出缓存对于那些包含不需要经常修改内容的,但需要大量处理才能编译完成的页面特别有用。需要读者注意的是,页面输出缓存是将页面全部内容都保存在内存中,并用于完成客户端请求。

    Duration:缓存的时间(秒),这是必选属性。如果未包含该属性,将出现分析器错误。

    VaryByParam:是指页面根据使用 POST 或 GET 发送的名称/值对(参数)来更新缓存的内容,多个参数用分号隔开。如果不希望根据任何参数来改变缓存内容,请将值设置为 none。如果希望通过所有的参数值改变都更新缓存,请将属性设置为星号 (*)。

    VaryByControl:通过用户控件文件中包含的服务器控件来改变缓存(值是控件ID,多控件用分号隔开)。

    只要在前台页面添加,就可以使用页面输出缓存

    <%@ OutputCache Duration="60" VaryByParam="none"%>

    运行下面例子,你会发现60秒内,访问页面的时间都没有改变

    复制代码
    <%@ OutputCache Duration="60" 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></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
             <%=DateTime.Now %>   
        </div>
        </form>
    </body>
    </html>
    复制代码
    <%@ OutputCache Duration="60" VaryByParam="a;b"%>

    页面会根据url后面的参数保存不同的缓存版本如http://localhost:3353/WebForm2.aspx?a=2&b=2http://localhost:3353/WebForm2.aspx?a=1&b=1是2个独立的缓存

    复制代码
    <%@ OutputCache Duration="60" VaryByParam="a;b"%>
    <!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></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
             <%=DateTime.Now %>   
        </div>
        </form>
    </body>
    </html>
    复制代码

    根据控件的来改变缓存(这个有点难理解,还是看例子)记得dropdownlist要加上 AutoPostBack="true",要不你改变了服务器都不知道,怎么帮你缓存啊!

    复制代码
    <%@ OutputCache Duration="60" VaryByParam="none" VaryByControl="DropDownList1"%>
    <!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></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <%=DateTime.Now %>
            <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true">
                <asp:ListItem>beijing</asp:ListItem>
                <asp:ListItem>shanghai</asp:ListItem>
                <asp:ListItem>guangzhou</asp:ListItem>
            </asp:DropDownList>
        </div>
        </form>
    </body>
    </html>
    复制代码

    在真正的项目中,缓存时间一般是写在Web.config的

    复制代码
      <system.web>
        <caching>
          <outputCacheSettings>
            <outputCacheProfiles>
              <add name="CacheTest" duration="50" />
            </outputCacheProfiles>
          </outputCacheSettings>
        </caching>
      </system.web>
    复制代码

    调用的时候

    <%@ OutputCache CacheProfile="CacheTest"  VaryByParam="none" %>

      注意:包含在用户控件(.ascx 文件)中的 @ OutputCache 指令不支持此属性。在页中指定此属性时,属性值必须与 outputCacheSettings 节下面的 outputCacheProfiles 元素中的一个可用项的名称匹配。如果此名称与配置文件项不匹配,将引发异常。

    我们还可以通过页面输出缓存API,来控制缓存Response类的Cache属性用于获取页面缓存策略。该方式的核心是调用System.Web.HttpCachePolicy。该类主要包含用于设置缓存特定的HTTP标头的方法和用于控制ASP.NET页面输出缓存的方法。(看例子)

    复制代码
    <!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></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <%=DateTime.Now %>
        </div>
        </form>
    </body>
    </html>
    复制代码
    复制代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    namespace WebApplication2
    {
        public partial class WebForm2 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
            }
        }
    }
    复制代码

      SetExpires方法:用于设置缓存过期的绝对时间。它的参数是一个DataTime类的实例,表示过期的绝对时间。SetLastModified方法:用于设置页面的Last-Modified HTTP标头。Last-Modified HTTP标头表示页面上次修改时间,缓存将依靠它来进行计时。如果违反了缓存限制层次结构,此方法将失败。该方法的参数是一个DataTime类的实例。

      SetSlidingExpiration方法:该方法将缓存过期从绝对时间设置为可调时间。其参数是一个布尔值。当参数为true时,Cache-Control HTTP标头将随每个响应而更新。此过期模式与相对于当前时间将过期标头添加到所有输出集的IIS配置选项相同。当参数为False时,将保留该设置,且任何启用可调整过期的尝试都将静态失败。此方法不直接映射到HTTP标头。它由后续模块或辅助请求来设置源服务器缓存策略。

      SetOmitVaryStar方法:ASP.NET 2.0新增的方法。用于指定在按参数进行区分时,响应是否应该包含vary:*标头。方法参数是一个布尔值,若要指示HttpCachePolicy不对其VaryByHeaders属性使用*值,则为true;否则为false。

      SetCacheability方法:用于设置页面的Cache-Control HTTP标头。该标头用于控制在网络上缓存文档的方式。该方法有两种重载方式,所不同的是参数。一种重载方法的参数是HttpCacheability枚举值,包括NoCache、Private、Public、Server、ServerAndNoCache和ServerAndPrivate(有关这些枚举值的定义,可参考MSDN)。另一种方法的参数有两个,一个参数是HttpCacheability枚举值,另一个参数是字符串,表示添加到标头的缓存控制扩展。需要注意的是,仅当与Private或NoCache指令一起使用时,字段扩展名才有效。如果组合不兼容的指令和扩展,则此方法将引发无效参数异常。

  • 相关阅读:
    VS调试问题整理 :无法在Web服务器上启动调试。您不具备调试此应用程序的权限...
    WebService参考 :什么是Web Services?(AMT研究院 袁磊)
    .NET和J2EE该相互学习什么?(转)
    使用 Visual Studio 2005 Team System 进行单元测试并生成用于 Unit Test Framework 的源代码 (实例)
    C#参考 :ReferenceEquals, == , Equals
    使用 Visual Studio 2005 Team System 进行单元测试并生成用于 Unit Test Framework 的源代码(详解)
    HTML参考 :TBODY元素 详解
    Indigo参考 (2) DataContract 使用 详解(转)
    Indigo参考 (1) :第一个Indigo Service (转)
    控件用法参考:DataList和Repeater控件的分页显示功能
  • 原文地址:https://www.cnblogs.com/sumg/p/3962321.html
Copyright © 2011-2022 走看看