缓存概览&使用页面输出缓存介绍。


  如果有人用枪抵着我的脑袋告诉我,只有五分钟来改进网站的性能,我会立即想到缓存。

利用缓存,可以极大改善Web 应用程序的性能。

 

ASP.NET 页面中执行最慢的操作是数据库访问。打开一个数据库连接并读取数据库是一个很慢的操作。改进数据访问代码性能的最好方法是根本不访问数据库。

利用缓存,可以再内存中把数据库记录缓存起来。从数据库读取数据是很缓慢的,相比而言,从缓冲读取数据则像闪电一样快。

 

.NET Framework 支持下面这些类型的缓存:

 ·   页面输出缓存

 ·  部分页面缓存

 ·  数据源缓存

 ·  数据缓存

 

页面数据输出缓存用于缓存页面呈现的所有内容(即在浏览器中选择查看源代码时能看到的所有内容)到内存中。当下一次任何用户请求相同的页面时,页面将从缓存中读取。

页面数据缓存作用于整个页面。在某些情况下,这会出现问题。

例如: 原本希望在页面随即显示不同的广告条,而如果缓存了整个页面,再次请求这个页面时,只会显示相同的广告条。

部分页面缓存通过只缓存页面上的一个特定区域来解决这个问题。利用部分页面缓存,可以对页面的不同区域应用不同的缓存策略。

数据缓存是最基本的缓存机制。在内部,所有其他类型的缓存都是使用数据缓存来实现的。可以使用数据缓存在内存中缓存任意的对象。

例如:可以使用数据缓存在应用程序的多个页面缓存一个DataSet。

 

注解:当配置和调试缓存时,可以用Fiddler工具,可以用来查看HTTP通信的原始请求和响应。

 

 · 使用页面输出缓存

可以给一个页面添加<% OutputCache%> 指令启用页面输出缓存。

例如:

<% OutputCache Duration="15" VaryByParam="none" %>   注: Duration="15" 表示设置页面缓存15秒。 可以设置更大的Duration

例如:可以赋值86400给Duration属性,那么页面就会缓存一天。页面并不绝对保证会缓存到我们指定的时间。当服务器内存资源变低时,缓存项会自动从缓存中移除。

当一个页面被缓存时,被请求时的页面内容并不会每次都重新生成。每次请求一个页面,对应到页面的.net类也不会执行。 对于每一个请求页面的用户,页面呈现的内容都会缓存。

 

页面可在多个闻之缓存。 默认情况下,页面可以缓存在浏览器、任意的代理服务器以及Web服务器。

 

下面是整个页面缓存10秒的一个例子:

 

HTML 代码(Default.aspx):

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Example.Web.Default" %>

<%@ OutputCache Duration="10" 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>
    <script type="text/javascript" language="javascript">
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Label ID="lblTime" runat="server" Text="Label"></asp:Label>
    </div>
    </form>
</body>
</html>


Default.aspx.cs 代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Example.Web
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            lblTime.Text = DateTime.Now.ToString("T");
        }
    }
}


 

当刷新页面时可以看到页面上的时间每10秒才会变动一次。

 

可以使用Response.RemoveOutputCacheItem()方法,以变成方式从缓存中移除一个页面。

 

以编程方式操作页面输出缓存:

HttpCachePolicy 类包含的属性和方法可用来以编程方式执行<% OutputCache %> 指令可以设置的所有任务。

HttpCachePolicy类由Response.Cache属性暴露。

例如(让页面缓存10秒),页面不设置<%@ OutputCache%> 

Default.aspx.cs :

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Example.Web
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.Cache.SetCacheability(HttpCacheability.Public);
            Response.Cache.SetExpires(DateTime.Now.AddSeconds(10));
            Response.Cache.SetMaxAge(TimeSpan.FromSeconds(10));
            Response.Cache.SetValidUntilExpires(true);
            Response.Cache.SetLastModified(DateTime.Now);
            Response.Cache.SetOmitVaryStar(true);
            lblTime.Text = DateTime.Now.ToString("T");
        }
    }
}


 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值