使用Cache提高ASP.NET性能
2013-08-06 17:08
357 查看
使用Cache提高ASP.NET性能
虽然现在已经是宽带时代,小猫已经离我们渐渐远去,可作为WEB应用开发者来说,我们仍然有责任和义务不断地通过技术手段来优化WEB应用性能,让用户浏览时少一些等待,多一些爽快。
所幸的是,ASP.NET作为基于.Net Framework的WEB开发技术,它也享用着.Net Framework的优越性,.Net Framework为我们提供了良好的Cache技术,使我们能开发出速度更快、用户体验更好的WEB应用。命名空间System.Web.Caching提供了Cache类,其Cache的有效性依赖分以下三种情况:
1.时间点(指定时间点内有效);
2.KEY值(KEY值作Cache项标识);
3.文件或目录(指定文件或目录变更,则原Cache项不可用);
下面我就结合实际开发的应用跟大家分享一下使用Cache提高ASP.NET性能。
我们在开发中常常会遇到读取记录列表(例如最近更新的新闻列表Top N)、记录本身(例如一条新闻),用户访问的时候,这样的信息是否每次都要重复从数据库中读取呢?聪明的你可能知道,这完全是没必要的。
我们为了方便处理,不防设计一个SiteCache类(借鉴了CS中的CSCache.cs),并提供若干静态方法,来负责处理Cache项的添加和删除。下面给出类图:
其实该类主要就是利用前文所提及的关于Cache依赖项的第一点与第二点的特性来维护我们自己的Cache项。有了SiteCache类,接下来看看如何使用它。还是以读取新闻TonN列表为例:
这样在5分钟内就不用重复访问数据库了来读该列表了,当然,也有人会问,如果在这5分钟内某条新闻删除了或修改了怎么办,没关系,我们在删除或修改时可以根据Cache KEY来强制删除该Cache项,当然,如果你觉得你对列表的时效性不是特别在意,你可以不强制删除该Cache项,让Cache项定义的时间点自动失效。当然,最好还是提供一个方法按匹配模式项来强行删除Cache项就可以了,例如:
发布新闻后调用静态方法ClearNewsSetTopNCache()强行清除原来的TopN缓存项,例如:
以上介绍使用Cache提高ASP.NET性能。
虽然现在已经是宽带时代,小猫已经离我们渐渐远去,可作为WEB应用开发者来说,我们仍然有责任和义务不断地通过技术手段来优化WEB应用性能,让用户浏览时少一些等待,多一些爽快。
所幸的是,ASP.NET作为基于.Net Framework的WEB开发技术,它也享用着.Net Framework的优越性,.Net Framework为我们提供了良好的Cache技术,使我们能开发出速度更快、用户体验更好的WEB应用。命名空间System.Web.Caching提供了Cache类,其Cache的有效性依赖分以下三种情况:
1.时间点(指定时间点内有效);
2.KEY值(KEY值作Cache项标识);
3.文件或目录(指定文件或目录变更,则原Cache项不可用);
下面我就结合实际开发的应用跟大家分享一下使用Cache提高ASP.NET性能。
我们在开发中常常会遇到读取记录列表(例如最近更新的新闻列表Top N)、记录本身(例如一条新闻),用户访问的时候,这样的信息是否每次都要重复从数据库中读取呢?聪明的你可能知道,这完全是没必要的。
我们为了方便处理,不防设计一个SiteCache类(借鉴了CS中的CSCache.cs),并提供若干静态方法,来负责处理Cache项的添加和删除。下面给出类图:
其实该类主要就是利用前文所提及的关于Cache依赖项的第一点与第二点的特性来维护我们自己的Cache项。有了SiteCache类,接下来看看如何使用它。还是以读取新闻TonN列表为例:
public static RecordSet GetNewsSetTopN(string classCode,int topN, SortPostsBy orderBy, SortOrder sortOrder, string language) { string cacheKey = string.Format("NewsSetTopN-LG:{0}:CC:{1}:TN:{2}:OB:{3}:SO:{4}", language,classCode,topN.ToString(), orderBy.ToString(),sortOrder.ToString()); //从上下文中读缓存项 RecordSet newsSet = HttpContext.Current.Items[cacheKey] as RecordSet; if (newsSet == null) { //从HttpRuntime.Cache读缓存项 newsSet = SiteCache.Get(cacheKey) as RecordSet; if (newsSet == null) { //直接从数据库从读取 CommonDataProvider dp=CommonDataProvider.Instance(); newsSet =dp.GetNewsSetTopN(language,classCode,topN,orderBy,sortOrder); //并将结果缓存到HttpRuntime.Cache中 SiteCache.Insert(cacheKey, newsSet, 60, CacheItemPriority.Normal); } } return newsSet; }
这样在5分钟内就不用重复访问数据库了来读该列表了,当然,也有人会问,如果在这5分钟内某条新闻删除了或修改了怎么办,没关系,我们在删除或修改时可以根据Cache KEY来强制删除该Cache项,当然,如果你觉得你对列表的时效性不是特别在意,你可以不强制删除该Cache项,让Cache项定义的时间点自动失效。当然,最好还是提供一个方法按匹配模式项来强行删除Cache项就可以了,例如:
/// <summary> /// 删除匹配的NewsSetTopN列表的Cache项 /// </summary> public static void ClearNewsSetTopNCache(string language, string classCode,int topN) { string cacheKey = string.Format("NewsSetTopN-LG:{0}:CC:{1}:TN:{2}", language,classCode,topN.ToString()); SiteCache.RemoveByPattern(cacheKey); }
发布新闻后调用静态方法ClearNewsSetTopNCache()强行清除原来的TopN缓存项,例如:
/// <summary> /// 发布(新建)新闻 /// </summary> /// <param name="post">新闻实例</param> /// <returns>返回状态</returns> public static int Create(News post) { int status; CommonDataProvider dp=CommonDataProvider.Instance(); dp.CreateUpdateDeleteNews(post, DataAction.Create, out status); //强制清除匹配的缓存项 ClearNewsSetTopNCache (post.Language, post.ClassCode,Globals. GetSiteSetting.NewsListTopN); return status; }
以上介绍使用Cache提高ASP.NET性能。
相关文章推荐
- [转]使用asp.net的缓存技术提高站点性能
- asp.net组件(6)合理使用Events提高性能
- 【Asp.Net从零开始】:使用缓存来提高网站性能 Caching(二)
- C# ASP.NET 优化程序性能、降低内存使用、提高程序运行速度
- 如何提高ASP.NET性能(1)—缓存的使用
- 【Asp.Net从零开始】:使用缓存来提高网站性能 Caching(一)
- ASP & ASP.NET 网站性能设计之Cache动态使用
- 使用asp.net的缓存技术提高站点性能
- ASP & ASP.NET 网站性能设计之Cache动态使用
- ASP & ASP.NET 网站性能设计之Cache动态使用
- ASP & ASP.NET 网站性能设计之Cache动态使用
- ASP.NET MVC 教程 -使用输出缓存提高性能(C#)
- 提高ASP.net的性能
- 提高ASP.Net应用程序性能的十大方法(二)
- 提高ASP.Net应用程序性能的十大方法
- ASP.NET 小技巧:重写 ViewState 的存储目的地,以提高页面性能
- 一些提高ASP.NET性能的方法
- 提高ASP.Net应用程序性能的十大方法
- 充分利用ASP.NET的三种缓存提高站点性能
- 使用MiniProfiler调试Asp.net Mvc性能