打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
OutputCache过滤器
你可以使用OutputCache过滤器来缓存的你查询结果,这样可以提高用户体验,也可以减少查询次数。它有以下属性:

Duration:缓存的时间,以秒为单位,理论上缓存时间可以很长,但实际上当系统资源紧张时,缓存空间还是会被系统收回。

VaryByParam:以哪个字段为标识来缓存数据,比如当“ID”字段变化时,需要改变缓存(仍可保留原来的缓存),那么应该设VaryByParam为"ID"。这里你可以设置以下几个值:
* = 任何参数变化时,都改变缓存。
none = 不改变缓存。
以分号“;”为间隔的字段名列表 = 列表中的字段发生变化,则改变缓存。

Location:缓存数据放在何处。缓存位置很重要,如果存在服务器上,那么所有用户看到的缓存视图都会一样,如果存在客户端,那么用户只会看到自己的缓存。比如:如果是一些私人信息,那就不能存在服务器上。你可以设置以下值:
· Any :默认值,输出缓存可位于产生请求的浏览器客户端、参与请求的代理服务器(或任何其他服务器)或处理请求的服务器上。

· Client:输出缓存位于产生请求的浏览器客户端上。

· Downstream 输出缓存可存储在任何 HTTP 1.1 可缓存设备中,源服务器除外。这包括代理服务器和发出请求的客户端。

· Server:输出缓存位于处理请求的 Web 服务器上。

· None:对于请求的页,禁用输出缓存。

· ServerAndClient:输出缓存只能存储在源服务器或发出请求的客户端中。代理服务器不能缓存响应。

NoStore:该属性定义一个布尔值,用于决定是否阻止敏感信息的二级存储。
除了直接在Action或者类的定义前加上属性,也可以使用配置文件,这样就可以动态配置你的缓存模式了。
在<system.web>节中,添加如下配置:

 

<caching>
<outputCacheSettings>
<outputCacheProfiles>
<add name="Cache1Hour" duration="3600" varyByParam="none"/>
</outputCacheProfiles>
</outputCacheSettings>
</caching>

那么在Controller中可以这样使用:

 

 

[OutputCache(CacheProfile="Cache1Hour")]
public string Index()
{
return DateTime.Now.ToString("T");
}

 

[扩展]在已经缓存的页面上添加动态内容
为了提高用户体验,我们会使用缓存技术,但是有时我们会需要在页面上改变内容,如:提供一些动态信息、广告的变化等。
此时我们可以调用 HttpResponse.WriteSubstitution() 方法。
例如: 

 

<% Response.WriteSubstitution(News.RenderNews); %>

 

其中News.RenderNews是一个静态方法,它的定义如下,这个方法用来随机显示三条广告词。



public class News
{
public static string RenderNews(HttpContext context)
{
var news
= new List<string>
{
"Gas prices go up!",
"Life discovered on Mars!",
"Moon disappears!"
};

var rnd
= new Random();
return news[rnd.Next(news.Count)];
}
}

 

你甚至可以为Response.WriteSubstitution()方法扩展一个Helper方法,如下所示:

 


public static class AdHelper
{
public static void RenderBanner(this HtmlHelper helper)
{
var context
= helper.ViewContext.HttpContext;
context.Response.WriteSubstitution(RenderBannerInternal);
}

private static string RenderBannerInternal(HttpContext context)
{
var ads
= new List<string>
{
"/ads/banner1.gif",
"/ads/banner2.gif",
"/ads/banner3.gif"
};

var rnd
= new Random();
var ad
= ads[rnd.Next(ads.Count)];
return String.Format("<img src='{0}' />", ad);
}

}

 

那么你就可以在页面上如此调用:

 

<% Html.RenderBanner(); %>

 

这样就会每刷新一次页,改变一次图像。但是数据内容却还是缓存的,并不会因为你刷新了页面而再次查询数据库。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
ASP.NET 2.0的页面缓存功能介绍
整理了一下MSDN中关于ASP.NET缓存机制的论述 - qdzx2008的专栏 - CS...
ASPX页面的缓存OutputCache
ASP.NET MVC 教程 -使用输出缓存提高性能(C#)
提高网站速度:ASP.NET缓存详解-程序开发-红黑联盟
ASP.NET Cache的一些总结
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服