发文章
发文工具
撰写
网文摘手
文档
视频
思维导图
随笔
相册
原创同步助手
其他工具
图片转文字
文件清理
AI助手
留言交流
缓存可以在客户端和服务器中做,要是之间还有代理,代理也可能对响应进行缓存。代理是将客户端和服务器连接在一起,作为中间人角色,可以将客户端请求响应的内容进行缓存,
在下次客户端缓存时,代理直接返回缓存结果,提高性能。代理缓存控制是在http头信息中cache-Control设置,当设成private时,代理不会进行缓存,
当设置为public时,代理可以进行缓存。我们可以用编程方式:
void SetPublicCache(){ TimeSpan ts = TimeSpan.FromSeconds(60); this.Response.Cache.SetMaxage(ts);//设置过期时间 this.Response.Cache.SetNoServerCaching();//关闭服务器输出缓存}
还可以使用OutPutCache命令:
<%@outputcache Duration="60" Location="DownStream" VaryByParam="None"%>
服务器缓存:包含内核缓存,IIS缓存,ASP.NET输出缓存,ASP.NET对象缓存,数据库缓存等windows内核缓存:当客户端http请求到达服务器,肯定是先进windows内核模块,
然后进行一些处理,把请求委托给IIS,IIS在委托给ASP.NET应用程序,这是大致的一个过程。windows包含一个内核模块的HTTP驱动,名为http.sys,HTTP协议在windows内核中提供了支持,提高了性能和灵活性。内核HTTP缓存默认为静态文件打开,对动态文件默认关闭。可以启动动态内容的缓存:
<%@outputcache Duration="60" VaryByParam="None"%>
这句话也会同时启动ASPNET输出缓存。编程方式启动:
void SetPublicCache(){ TimeSpan ts = TimeSpan.FromSeconds(60); this.Response.Cache.SetMaxage(ts);//设置过期时间 this.Response.Cache.SetCacheability(HttpCacheability.Public);}
内核缓存,会占用内核内存,是稀有资源,在120秒内没有命中缓存,就会被移除。在内核缓存下面的是IIS输出缓存,可以根据查询字符串进行缓存,这是内核缓存不具备的。再下面就是ASP.NET输出缓存:独立于IIS输出缓存,还可以根据参数改变输出,设置方式和上面是一样的,ASP.NET输出缓存还可以使用在用户控件之上,而页面可以不设置缓存。关闭方法:this.Response.Cache.SetNoServerCaching();//关闭服务器输出缓存还可以从输出缓存中显示指定移除项:
HttpResponse.RemoveOutPutCacheItem("/pages/default.aspx");ASP.NET对象缓存
HttpApplicationState app = this.Context.Application;string myvalue = null;app.Lock();try{ myvalue = (string)app["key"]; if(myvalue == null) { myvalue = "value"; app["key"] = myvalue; }}finally{ app.unlock();}
因为这种方式变量是多个线程可以访问的,保证一致性状态,对象本身实现的lock方法,可以运用。
this.Context.Items["key"] = "value";
使用场景是用户控件之间共享数据,httpModule与页面之间交互机制。
可以使用HttpContext.Cache缓存不止一个用户需要且由多个页面请求的对象。使用:
public Static Object lockObject = new object();lock(lockObject){ if(this.cache["key"] == null) { this.cache["key"] = "value"; }}
还可以指定运行时保留的时间
if(this.Cache["key"] == null){ this.Cache.Add("key","value",null,DateTime.Now.AddSeconds(60) ,CacheItemPriority.High,null);//指定时间,是否滑动过期,等级是否高}
if(this.Cache["key"] == null){ this.Cache.Add("key","value",null,DateTime.Now.AddSeconds(60)
,CacheItemPriority.High,null);//指定时间,是否滑动过期,等级是否高}
还可以让缓存依赖于文件:
public class XmlDepend{ public static object lockobject = new object(); public static XmlDocument MyDocument(string path) { string key = "mydoc:"+path; Cache cache = HttpContext.Current.Cache; lock(lockobject) { xmlDocument doc = (XmlDocument)Cache[key]; if(doc==null) { doc = new XmlDocument(); doc.Load(path); CacheDependency cd = new CacheDependency(path); cd.Insert(key,doc,cd); } return doc; } }}
这会将一个xml文件路径给方法,用它构造一个缓存键,如果xmlDocument仍然在缓存中则返回它,否则就从硬盘加载,并创建缓存依赖,当xml文件被修改时,它会通知,并移除xmldocument的存环对象。
来自: 昵称10504424 > 《C#》
0条评论
发表
请遵守用户 评论公约
.net环境下的缓存机制
摘要: 介绍缓存的基本概念和常用的缓存技术,给出了各种技术的实现机制和适用范围说明,设计缓存方案应该考虑的问题,以及.NET环境下可用的缓存技术.O当业务逻辑可以容忍缓存数据的陈旧时就缓存原始数据...
Cache在aspx.cs和xxx.CS里的不同用法
Asp.net程序性能优化的七个方面
ASP.net中常用的缓存方式有:数据缓存是一种强大而又非常简单的缓存机制,它可以在缓存区中为每个应用程序保存各种对象,这些对象可以根据http的请求被调用,但是在各个不同的应用程序中这些对象都是私...
编写高性能Web网站应用程序入门的10个技巧
编写高性能Web网站应用程序入门的10个技巧 用 ASP.NET 编写 Web 应用程序其轻松程度令人难以置信。我们个人经验来自在微软 ASP.NET 团队从事底层架构程序经理,运行和管理 www.asp.net ,并协助架构 Com...
编写高性能 Web 应用程序的 10 个技巧
AMD赢得Meta订单/首次采用3D V-Cache的服务器U发布
AMD赢得Meta订单/首次采用3D V-Cache的服务器U发布。EPYC 7773X有64个内核和128个线程,EPYC 7573X有32个内核和128个线程,EPYC 7473X有...
Memcache架构新思考
Memcache架构新思考。2011年初Marc Kwiatkowski通过Memecache@Facebook介绍了Facebook的Memcache架构,现在重新审视这个架构,仍有很多...
脑残式网络编程入门(三):HTTP协议必知必会的一些知识
4、Http缓存相关的知识当我们发起一个http请求后,服务器返回所请求的资源,这时我们可以将该资源的副本存储在本地,这样当再次对该url...
状态管理(ViewState、Cookie、Session、Application、Cache)
状态管理(ViewState、Cookie、Session、Application、Cache)状态管理(ViewState、Cookie、Session、Application、Cache)2010-08-06 23:18.cookie:可以用索引符来访问cookie,并使用HttpCookie的va...
微信扫码,在手机上查看选中内容