多语言展示
当前在线:780今日阅读:176今日分享:34

C# Cache 设置缓存时间过期,自动清除

Cache 与Session都可以服务器中保存请求后的信息。Cache保存的信息不受会话连接的限制,信息可以在多个会话中共享,而Session只能保存在当前请求连接中。因此,Cache 具有共享数据的优点,但是不设置过期时间,清除不用的Cache,那么产生内存垃圾,降低响应速度。
工具/原料

VS2015

方法/步骤
1

Cache有3种过期策略。第一种:没有时间限制。Cache.Add(key,value)或者Cache.Insert(key,value);不加任何时间限制,增加的数据是不会过期的。Add方法重复键值是不会在增加的,Insert数据是会覆盖重复的键值。

2

第一种情况,间隔后台刷新多次,仍能取到值。C#aspx的后台Pageload方法给Repeater控件赋值DataTable。DataTable的获取从Cache里面。

3

if (Session['wwewew'] == null || Session['wwewew'].ToString() == '')        {             Session['wwewew'] = wwewe;            if (!string.IsNullOrEmpty(wwewe) && wwewe == '1')            {                DataTable ds = new DataTable();                DataRow deru = ds.NewRow();                DataColumn qwkop = new DataColumn();                qwkop.ColumnName = '1';                ds.Columns.Add(qwkop);                DataColumn qwkopq = new DataColumn();                qwkopq.ColumnName = '2';                ds.Columns.Add(qwkopq);                DataColumn qwkopr = new DataColumn();                qwkopr.ColumnName = '3';                ds.Columns.Add(qwkopr);                deru[0] = '1';                deru[1] = '2';                deru[2] = '3';                ds.Rows.Add(deru);                Cache.Insert('Data', ds);            }

4

第二种情况,隔断时间过期,过10秒后再刷新页面就取不到值了。            else if (!string.IsNullOrEmpty(wwewe) && wwewe == '2')            {                DataTable ds = new DataTable();                DataRow deru = ds.NewRow();                DataColumn qwkop = new DataColumn();                qwkop.ColumnName = '1';                ds.Columns.Add(qwkop);                DataColumn qwkopq = new DataColumn();                qwkopq.ColumnName = '2';                ds.Columns.Add(qwkopq);                DataColumn qwkopr = new DataColumn();                qwkopr.ColumnName = '3';                ds.Columns.Add(qwkopr);                deru[0] = '33';                deru[1] = '45';                deru[2] = '66';                ds.Rows.Add(deru);                Cache.Insert('Data', ds, null, DateTime.Now.AddSeconds(10), TimeSpan.Zero);            }

5

第三种情况,连续过10秒没有访问这个键值就过期,后台取不到值了。            else if (!string.IsNullOrEmpty(wwewe) && wwewe == '3')            {                DataTable ds = new DataTable();                DataRow deru = ds.NewRow();                DataColumn qwkop = new DataColumn();                qwkop.ColumnName = '1';                ds.Columns.Add(qwkop);                DataColumn qwkopq = new DataColumn();                qwkopq.ColumnName = '2';                ds.Columns.Add(qwkopq);                DataColumn qwkopr = new DataColumn();                qwkopr.ColumnName = '3';                ds.Columns.Add(qwkopr);                deru[0] = '7';                deru[1] = '8';                deru[2] = '9';                ds.Rows.Add(deru);                Cache.Insert('Data', ds, null, DateTime.MaxValue, TimeSpan.FromSeconds(10));             }

6

前端页面:    

           
   
                                    
   
输入框中后端会根据数值判断:1-永不过期;2-绝对时间过期;3-变化时间过期
                                                                                                                                           
<%#Eval('1')%><%#Eval('2')%><%#Eval('3')%>

注意事项
1

刷新后会重复提交表单,进入Page_Load方法,文本框的值还会保留上一次的输入

2

所以用Session 保存Form提交的值,如果上一次是这个值,就不z在给DataTable

3

赋值,直接从Cache取值

推荐信息