首页 > 人工智能 > 正文

ASP.NET 2.0缓存技术探讨

2009-05-12 09:18:04  来源:51cto

摘要:本文介绍通过缓存来提高网页的执行效率,包括ASP.NET Output Caching、Page Fragment Caching等内容。希望大家能从中受益。
关键词: 开发 ASP.NET

   1.ASP.NET Output Caching
    当一个网页频繁被访问的时候,我们可以通过把整个网页缓存来提高执行效率。这样作的优点是,当用户再次访问这个网页的时候,被格式化好的HTML会被直接送显。
    为什么会存在这种效果呢?我们通过ASP.NET的基本运行机制来解释这个问题。ASP.NET是一个动态的服务器,当用户从客户端提供一个请求的时候,那么服务端的IIS接受到请求,然后根据用户的提示执行相应的代码。执行代码之后生成一个结果。这个结果会被缓存成一个HTML放在Server 端,然后通过响应用户的Request将这个HTML传送到客户端。在这之中我们发现,很多时候,用户的请求实际上并没有多大的变化,可能请求的都是相同的内容。这时候执行一次代码的成本就会相当的高。既然我们已经生成了一个HTML,我们何必要在重新执行一次代码呢?我们直接把HTML送显就可以了。
    ◆Output Cache是一项非常有效的增强访问性能的技术,由于IIS的一些特性,默认情况下Output Cache是打开的,但是要对一些请求进行缓存,还需要开发者进行定制。
    ◆定制Output Caching
    对于Output Caching的定制,我们有两种方法,一种是基于底层的API技术,一种是基于高层的@Output Caching,一旦Output Caching被定制过,那么这个网页就会在第一次被访问的时候生成cache,直到请求过期为止。
    我们着重点是使用高层的@Output Caching标签来设置,因为API技术的编程难度比较大,和ASP.NET快速编程理念不相符。
    ◆代码示例:通过使用Output Cache定义一个缓存页,显示当前时间,大家可以看到,当这个页面被缓存之后,刷新时,当前时间显示不发生变化。
    <script runat=“server”>
    protected void Page_Load(object sender, EventArgs e)
    {
    TimeMsg.Text = DateTime.Now.ToString();
    }
    </script>//head以前。
    protected void Page_Load(object sender, EventArgs e)
    {
    TimeMsg.Text = DateTime.Now.ToString();
    }
    <%@ Page Language=“C#” AutoEventWireup=“true” CodeFile=“Default.aspx.cs” Inherits=“_Default” %>
    <%@ OutputCache Duration=“60” VaryByParam=“none” %>
    ◆示例讲解
    在这个页面中<%@ Output Cache Duration = “60” VaryByParam = “none”%>
    这段话定义了页面将要被缓存,并且,其缓存时间为60秒,并在一个页面被缓存之后,通过定义VaryByParam属性,它不会因为request接受的参数而改变,只有在60秒之后,页面自动清除缓存,此时,第一个访问提供了新的缓存。
    ◆代码示例:数据访问的小示例,相对显示当前数据示例,这个示例更能显示缓存页之后刷新的性能优势。
    <script runat=“server”>
    protected void Page_Load(object sender, EventArgs e)
    {
    TimeMsg.Text = DateTime.Now.ToString();
    }
    </script>//head以前。
    protected void Page_Load(object sender, EventArgs e)
    {
    TimeMsg.Text = DateTime.Now.ToString();
    }
    <%@ Page Language=“C#” AutoEventWireup=“true” CodeFile=“Default.aspx.cs” Inherits=“_Default” %>
    <%@ OutputCache Duration=“60” VaryByParam=“none” %>//最上面
    ◆由参数改变缓存内容
    有些时候我们需要根据用户的请求来生成页面,但是用户的请求只有有限的几种组合,这个时候就可以根据用户请求来生成几种缓存页面,来进行缓存。
    ◆代码示例:接受参数示例,根据用户选择不同的Name显示不同的数据库内容。
    最开始部分:
    <%@ Page Language=“C#” AutoEventWireup=“true” CodeFile=“Default.aspx.cs” Inherits=“_Default” %>
    <%@ OutputCache Duration=“60” VaryByParam=“Name” %>
    <script runat=“server”>
    protected void Page_Load(object sender, EventArgs e)
    {
    TimeMsg.Text = DateTime.Now.ToString(“G”);
    }
    </script>
    Body内容:
    <span style=“font-family: Verdana”>Using the Output Cache</span><b>Authors by Name:</b>
    <table cellpadding=“3” cellspacing=“0” rules=“all” style=“border-left-color: black;
    border-bottom-color: black; width: 700px; border-top-color: black; border-collapse: collapse;
    background-color: #aaaadd; border-right-color: black”>
    <tr>
    <td>
    <a href=“Default.aspx?Name=李阳”>1</a></td>
    <td>
    <a href=“Default.aspx?Name=陈胜”>2</a></td>
    <td>
    <a href=“Default.aspx?Name=夏秘密”>3</a></td>
    <td>
    <a href=“Default.aspx?Name=范玲玲”>4</a></td>
    </tr>
    </table>
    <br />
    <asp:GridView ID=“GridView1” runat=“server” DataSourceID=“SqlDataSource1”>
    </asp:GridView>
    <asp:SqlDataSource ID=“SqlDataSource1” runat=“server” ConnectionString=“<%$ ConnectionStrings:qimuConnectionString %>”
    SelectCommand=“SELECT * FROM [tab1] WHERE ([Name] = @Name)”>
    <SelectParameters>
    <asp:QueryStringParameter Name=“Name” QueryStringField=“Name” DefaultValue=“李阳” />
    </SelectParameters>
    </asp:SqlDataSource>
    <br />
    <em>Last generated on:</em>
    <asp:Label ID=“TimeMsg” runat=“server”></asp:Label>&nbsp;
    显示效果:
    Using the Output CacheAuthors by Name:
    1       2      3      4
    ID      Name      Sex
    1      李阳       男
    Last generated on: 2009-5-10 0:29:13
  


第三十八届CIO班招生
国际CIO认证培训
首席数据官(CDO)认证培训
责编:

免责声明:本网站(http://www.ciotimes.com/)内容主要来自原创、合作媒体供稿和第三方投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。