.NET的三种缓存(页面缓存,控件缓存,自定义缓存)
BLL.Area bll = new BLL.Area();
protected void Page_Load(object sender, EventArgs e)
{
if (Cache["tList"] != null)
{
Response.Write("已经有数据了!!!" + Cache.Count);
this.Repeater1.DataSource = Cache["tList"];
this.Repeater1.DataBind();
}
else
{
Response.Write("没有数据,请求服务器获得数据了!!!");
List<Model.Area> list = bll.GetCityList();
this.Repeater1.DataSource = list;
this.Repeater1.DataBind();
//不设置缓存过期时间
//Cache["tList"] = list;
//Cache.Insert("tList",list);
//使用缓存的绝对过期时间
Cache.Insert("tList",list,null,DateTime.Now.AddSeconds(35),System.Web.Caching.Cache.NoSlidingExpiration);
//使用缓存的相对过期时间
Cache.Insert("tList",list,null,DateTime.MaxValue,new TimeSpan(0,0,15));
Response.Write(Cache.Count);
}
}
1。页面缓存和控件缓存的区别:
1.1页面缓存是保存的被请求页面对象执行后生成的html代码。
控件缓存是保存的数据源控件上次查询到的 数据集合(List<Classes> list)
1.2页面缓存一旦使用,那么在缓存失效之前,服务器都不会在创建被请求的页面类对象来执行生成html代码了,而是直接从缓存里获上次生成的HTML代码
控件缓存一旦使用,那么不管缓存有没有失效,服务器都会为每个浏览器请求创建页面类对象并执行生成Html代码。只不过,在运行页面对象的过程中,当发现数据源控件已经缓存了上次查询的结果数据,就不再调用数据源绑定的方法来获得数据,而是直接从缓存中获上次查询的数据。
2.1绝对过期时间:是指定一个确切的时间点,过了,缓存就自动清空。
2.2相对过期时间:是指定一个确切的时间戳(如:15秒),那么页面在15秒内被任何一个浏览器访问,缓存失效时间都会更新回15秒并重新倒数计时。一旦15秒内没有任何访问,那么服务器就会清空该缓存。
// 参数:
// key:
// 用于引用该对象的缓存键。
//
// value:
// 要插入缓存中的对象。
//
// dependencies:
// 该项的文件依赖项或缓存键依赖项。当任何依赖项更改时,该对象即无效,并从缓存中移除。如果没有依赖项,则此参数包含 null。
//
// absoluteExpiration:
// 所插入对象将到期并被从缓存中移除的时间。要避免可能的本地时间问题(例如从标准时间改为夏时制),请使用 System.DateTime.UtcNow
// 而不是 System.DateTime.Now 作为此参数值。如果使用绝对到期,则 slidingExpiration 参数必须为 System.Web.Caching.Cache.NoSlidingExpiration。
//
// slidingExpiration:
// 最后一次访问所插入对象时与该对象到期时之间的时间间隔。如果该值等效于 20 分钟,则对象在最后一次被访问 20 分钟之后将到期并被从缓存中移除。如果使用可调到期,则
// absoluteExpiration 参数必须为 System.Web.Caching.Cache.NoAbsoluteExpiration。
//
// priority:
// 该对象相对于缓存中存储的其他项的成本,由 System.Web.Caching.CacheItemPriority 枚举表示。该值由缓存在退出对象时使用;具有较低成本的对象在具有较高成本的对象之前被从缓存移除。
//
// onRemoveCallback:
// 在从缓存中移除对象时将调用的委托(如果提供)。当从缓存中删除应用程序的对象时,可使用它来通知应用程序。
//
// 异常:
// System.ArgumentNullException:
// key 或 value 参数为 null。
//
// System.ArgumentOutOfRangeException:
// 将 slidingExpiration 参数设置为小于 TimeSpan.Zero 或大于一年的等效值。
//
// System.ArgumentException:
// 为要添加到 Cache 中的项设置 absoluteExpiration 和 slidingExpiration 参数。
public void Insert(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration, CacheItemPriority priority, CacheItemRemovedCallback onRemoveCallback);
使用例子如下:
BLL.Area bll = new BLL.Area();
protected void Page_Load(object sender, EventArgs e)
{
if (Cache["tList"] != null)
{
Response.Write("已经有数据了!!!" + Cache.Count);
this.Repeater1.DataSource = Cache["tList"];
this.Repeater1.DataBind();
}
else
{
Response.Write("没有数据,请求服务器获得数据了!!!");
List<Model.Area> list = bll.GetCityList();
this.Repeater1.DataSource = list;
this.Repeater1.DataBind();
//不设置缓存过期时间
//Cache["tList"] = list;
//Cache.Insert("tList",list);
//使用缓存的绝对过期时间
//Cache.Insert("tList",list,null,DateTime.Now.AddSeconds(35),System.Web.Caching.Cache.NoSlidingExpiration);
//使用缓存的相对过期时间
//Cache.Insert("tList",list,null,DateTime.MaxValue,new TimeSpan(0,0,15));
CacheDependency cdd=new CacheDependency (Server.MapPath("CacheDependency.txt"));
Cache.Insert("tList", list, cdd, DateTime.MaxValue, new TimeSpan(0, 0, 35), CacheItemPriority.Normal, aa);
Response.Write(Cache.Count);
}
}
private void aa(string key, object value, CacheItemRemovedReason reason)
{
string msg = "Key: " + key + ",Value: " + value.ToString() + "Reson: " + reason.ToString();
string logPath = Server.MapPath("SelfCache_Log.txt");
System.IO.File.WriteAllText(logPath, msg);
}
.NET的三种缓存(页面缓存,控件缓存,自定义缓存)的更多相关文章
- Js之Dom学习-三种获取页面元素的方式、事件、innerText和innerHTML的异同
一.三种获取页面元素的方式: getElementById:通过id来获取 <body> <input type="text" value="请输入一个 ...
- 介绍三个Android支持库控件:TabLayout+ViewPager+RecyclerView
本文主要介绍如下三个Android支持库控件的配合使用: TabLayout:android.support.design.widget.TabLayout ViewPager:android.sup ...
- cesium页面小控件的隐藏
cesium页面小控件的隐藏 1 创建一个Viewer var viewer = new Cesium.Viewer('cesiumContainer');//cesiumContainer为di ...
- Xamarin自定义布局系列——PivotPage,多页面切换控件
PivotPage ---- 多页面切换控件 PivotPage是一个多页面切换控件,类似安卓中的ViewPager和UWP中的Pivot枢轴控件. 起初打算直接通过ScrollView+StackL ...
- js-关于iframe:从子页面给父页面的控件赋值方法
项目中我们经会用到iframe,可能还会把iframe里的数值赋值给父页面空间. 接下来我们来说说有关于iframe赋值给父页面的方法. 1.子页面iframe给父页面的控件赋值方法. parent. ...
- findControl 可以获取前台页面的控件
findControl 可以获取前台页面的控件
- Vue input 控件: 通过自定义指令(directive)使用正则表达式限制input控件的输入
前言: 网站中的input输入框使用非常广泛,因业务场景不同需要对输入框做合法性校验或限制输入,比如电话号码.邮件.区号.身份证号等.input框的不合法内容主要有两种方式处理:1.用户输入内容后,通 ...
- WPF 4 DataGrid 控件(自定义样式篇)
原文:WPF 4 DataGrid 控件(自定义样式篇) 在<WPF 4 DataGrid 控件(基本功能篇)>中我们已经学习了DataGrid 的基本功能及使用方法.本篇将继续 ...
- WPF Calendar 日历控件 样式自定义
原文:WPF Calendar 日历控件 样式自定义 粗略的在代码上做了些注释 blend 生成出来的模版 有的时候 会生成 跟 vs ui界面不兼容的代码 会导致可视化设计界面 报错崩溃掉 但是确不 ...
- JS——三种嵌入页面的方式
一 行间事件 二 页面script标签嵌入 三 外部引入 <!DOCTYPE html> <html lang="en"> <head> < ...
随机推荐
- hive查询语句
一. 为什么hive是数据仓库 hive局限于hdfs, 不能进行记录级别的增删改 hive底层的mapreduce启动耗时很长, 无法做到传统数据库的秒查, 只适合离线分析 hive不支持事务, 无 ...
- 解决pdm打开只显示表名不显示字段的步骤
解决pdm打开只显示表名不显示字段的方法 选中PDM 依次点击 工具-->显示参数选择-->content 下面的table ,右边勾选上columns 点击OK 选择 all symbo ...
- DBA_Oracle Database 11g 面向 DBA 和开发人员的重要特性
2015-01-23 Created By BaoXinjian
- Error: L6218E: Undefined symbol TIM_ARRPreloadConfig (referred from pwm_output.o).
出错原因:模板FWLIB中没有添加stm32f10x_tim.c文件.添加即可 一般利用库开发,将ppp.c(ppp.c又调用了库stm32f10x_xx.h)写好之后的调用步骤: 1 将ppp.c和 ...
- Introduction to ASP.NET Web Programming Using the Razor Syntax (C#)
1, http://www.asp.net/web-pages/overview/getting-started/introducing-razor-syntax-c 2, Introduction ...
- JAVA while循环,do-while循环,for循环
一.while循环 实例: public class Test{ public static void main(String[] args){ int i = 1; while(i<30){ ...
- strace命令
简介 strace常用来跟踪进程执行时的系统调用和所接收的信号. 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核 ...
- GC之三--GC 触发Full GC执行的情况及应对策略
1.System.gc()方法的调用 此方法的调用是建议JVM进行Full GC,虽然只是建议而非一定,但很多情况下它会触发 Full GC,从而增加Full GC的频率,也即增加了间歇性停顿的次数. ...
- log4j+logback+slf4j+commons-logging的关系与调试
背景 由于现在开源框架日益丰富,好多开源框架使用的日志组件不尽相同.存在着在一个项目中,不同的版本,不同的框架共存.导致日志输出异常混乱.虽然也不至于对系统造成致命伤害,但是明显可以看出,架构 ...
- gettimeofday() 获取系统时间,精确到微秒 这个似乎只能在linux 下用,不能在windows 下用
struct timeval{ long int tv_sec; // 秒数 同time(NULL) 的返回值 long int tv_usec; // 微秒数 10 的6次方 }; struct t ...