MVC缓存03,扩展方法实现视图缓存
关于缓存,先前尝试了:
● 在"MVC缓存01,使用控制器缓存或数据层缓存"中,分别在控制器和Data Access Layer实现了缓存
● 在"MVC缓存02,使用数据层缓存,添加或修改时让缓存失效"中也尝试了在添加或修改时让缓存失效
本篇,要尝试的是视图缓存。
□ 思路
1、缓存的载体是什么?
在Data Access Layer中,缓存是围绕System.Runtime.Caching进行的,而在视图层面,当然是围绕上下缓存HttpContext.Cache而进行。
2、缓存内容如何显示?
老赵用部分视图显示缓存内容,而张占岭先生在此基础上,使用HelperResult把缓存字符串最终写到视图页面上。
视图缓存通用方法
围绕HtmlHelper.ViewContext.HttpContext.Cache而进行。我就干脆把扩展方法的命名空间改成System.Web.Mvc,避免在视图配置文件中配置,另外,扩展方法的返回类型保持和HtmlHelper一致,也是MvcHtmlString。
视图中:
Before Rendering: @DateTime.Now
<br />
<span style="color: red">
Rendering:
@Html.Cache("Now",null, DateTime.Now.AddSeconds(60),System.Web.Caching.Cache.NoSlidingExpiration,
() => {System.Threading.Thread.Sleep(5000);return DateTime.Now;})
</span>
<br/>
After Rendering:
@DateTime.Now
结果:
接着,老赵在"适合ASP.NET MVC的视图片断缓存方式(中):更实用的API"一文中,使用部分视图把缓存内容显示出来,我没有深究,因为看到张占岭先生用更简单的方法实现了相同的效果。
使用HelperResult显示缓存内容
HelperResult是.NET基础架构中的一员,它的构造函数接收类型为System.IO.TextWriter的System.Action参数。
而System.Action<T>是一个委托:
于是,我们就可以使用TextWriter把缓存字符串写出来。
视图中:
Before Rendering:@DateTime.Now
<br/>
Rendering:@Html.CacheZ("test", DateTime.Now.AddMinutes(1),@<span style="color: red">@DateTime.Now</span>)
<br/>
After Rendering:@DateTime.Now
感谢老赵引出了视图缓存的通用思路,同时,佩服张占岭先生对代码作了很大程度的简化!
最后,引用老赵的话:Business,Data Access,Presentation,每一层都有缓存。同级别的缓存,各种方式各有使用场景,各有缺点。
相关文章
- WebAPi添加常用扩展方法及思维发散
- linux环境中,top命令中,对command的命令进行扩展查看详情?
- SoapUI 如果你需要一款强大的可扩展的接口测试工具非他莫属
- PHP libevent扩展安装
- 如何使用T-SQL备份还原数据库及c#如何调用执行? C#中索引器的作用和实现。 jquery控制元素的隐藏和显示的几种方法。 localStorage、sessionStorage用法总结 在AspNetCore中扩展Log系列 - 介绍开源类库的使用(一) span<T>之高性能字符串操作实测
- DataTable和DataRow利用反射直接转换为Model对象的扩展方法类
- 同步FIFO的两种Verilog设计方法(计数器法、高位扩展法)
- 【C#】扩展方法(方法参数里的this)
- 扩展Date的DateDiff方法--日期差
- pip安装(install)任何package(扩展库)都报错status = self.run(options, args)...check_hostname requires serve的解决方法
- 在Linux中扩展/缩减LVM(第二部分)
- 《大数据系统构建:可扩展实时数据系统构建原理与最佳实践》一2.3 图模式
- 《Python数据挖掘:概念、方法与实践》一 第1章 扩展你的数据挖掘工具箱
- 扩展方法略好于帮助方法
- 彻底禁用Chrome的“请停用以开发者模式运行的扩展程序”提示
- 《JavaScript数据可视化编程》——1.5 用气泡图表示数量扩展x/y数据
- SpringBoot扩展SpringMVC自动配置
- 扩展thinkphp5的redis类方法
- 一、模型验证CoreWebApi 管道方式(非过滤器处理)2(IApplicationBuilder扩展方法的另一种写法)
- 基于PhalApi的PHPExcel扩展实现数据导入导出
- 面向系统测试的一种ganglia指标扩展的方法
- [js高手之路] 跟GhostWu一起封装一个字符串工具库-扩展字符串位置方法(4)
- [js高手之路] 跟GhostWu一起封装一个字符串工具库-扩展camelize与dasherize方法(3)
- 【Unity3D编辑器扩展】Unity3D中解决Text的清晰度问题
- 真实世界:使用WCF扩展在方法调用前初始化环境
- [Oracle]如何查看一个数据文件是否是自动扩展
- ORA-03206,当表空间不够时,如何以添加数据文件的方式扩展表空间
- C# this关键字(给底层类库扩展成员方法)
- Spring框架内部扩展