.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> < ...
随机推荐
- MarkDowdPad 破解
一部小心把markdown破解了,把破解后的主程序发出来吧,放到安装根目录即可.点击升级到专业,随意输入邮箱和8位注册码,确定后会显示失败,返回即可,然后你就会发现已经变成专业版了. 不知道博客园怎么 ...
- VC++、MFC、COM和ATL的区别
今天看到的,感觉不错.转载了 一.什么是MFC 微软基础类(Microsoft Foundation Classes),实际上是微软提供的,用于在C++环境下编写应用程序的一个框架和引擎,VC++是W ...
- spark MapOutputTrackerMaster
最近用了一个RowNumber() over()函数 进行三张4000万数据的关联筛选,建表语句如下: create table CiCustomerPortrait2 as SELECT ROW_N ...
- Python 汉字转拼音库 pypinyin
一.初衷: 一些开源软件的配置文件中识别区分的部分用英文,那么我们在批量生成配置文件的时候,可以从CMDB导入汉字(idc_name), 然后将它转换成拼音,再或者拼接上IP地址,以便更准确的识别.例 ...
- HTML5 Web Storage概述
Web Storage html5新增功能 可以在客户端本地保存数据 之前是使用Cookies在客户端保存注入用户名等简单用户信息,但永久数据存在几个问题 大小:cookies大小被限制在4KB 带宽 ...
- 关于java MulticastSocket中的joinGroup(SocketAddress mcastAddr,NetworkInterface netif)
今天复习了一下java网络编程这方面(其实是之前没有学好),之前在linux下用c来做过一些例子,不过不好久没有用也就忘得一干二净了.不知道c/c++的东西不太好记,还是当初没好好学. 关于组播这方面 ...
- this web application instance has been stopped already解决办法
重启tomcat的时候出错 Illegal access: this web application instance has been stopped already. Could not loa ...
- 高可用集群heartbeat全攻略
heartbeat的概念 Linux-HA的全称是High-Availability Linux,它是一个开源项目,这个开源项目的目标是:通过社区开发者的共同努力,提供一个增强linux可靠性(r ...
- node在安装完成后,出现node不是内部或外部命令
node在安装完成后,查看node版本 node -v出现"node不是内部或外部命令"郁闷. 各种搜索之后,处理好了问题了. 一张图解决问题.
- cocso2d-x改变精灵图片
cocos2d-x 改变精灵图片的2种方法. 1. // 首先载入贴图集 CCSpriteBatchNode *spriteBatch=CCSpriteBatchNode::batchNodeWith ...