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

来源:互联网 发布:大数据买卖 编辑:程序博客网 时间:2024/06/08 06:13


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

利用缓存,可以极大改善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");        }    }}


 

 

 

原创粉丝点击