HttpContext.Cache 详解
提到HttpContext.Cache必然会想到Application,他们有什么共性和不同点呢,我们一一道来
- 相同点:
1、两者都是使用键值对来存储对象
2、两者都是应用程序同生命周期(在cache不设置缓存策略的情况下)
- 不同点
1、锁的方式:application采用lock,unlock来控制脏操作
Cache内部自动完成锁定高效率
我们做一个最简单的比较,测试读取999999次,这只是单线程的
public void ApplicationTime()
{
for (int i = ; i < ; i++)
{
var s = HttpContext.Application["Name"];
}
} public void CacheTime()
{ for (int i = ; i < ; i++)
{
var s = HttpContext.Cache["Name"];
}
} //
// GET: /Home/
public ActionResult Index()
{ HttpContext.Application["Name"] = "张三";
HttpContext.Cache["Name"] = "张三";
Stopwatch swApplication= new Stopwatch();
swApplication.Start();
ApplicationTime();
swApplication.Start();
var applicationLong= swApplication.ElapsedMilliseconds; Stopwatch swCache = new Stopwatch();
swCache.Start();
CacheTime();
swCache.Start();
var cacheLong = swCache.ElapsedMilliseconds;
applicationLong:1373 cacheLong:925
单线程无法说明太多的问题,我们来看一个多线程的
public List<Thread> applicationThreads = new List<Thread>();
public List<Thread> cacheThreads = new List<Thread>(); public void ApplicationTime()
{
for (int i = ; i < ; i++)
{
var s = HttpContext.Application["Name"];
}
applicationThreads.Remove(Thread.CurrentThread);
} public void CacheTime()
{
for (int i = ; i < ; i++)
{
var s = HttpContext.Cache["Name"];
}
cacheThreads.Remove(Thread.CurrentThread);
} public void CachePool()
{
Stopwatch stopwatch=new Stopwatch();
stopwatch.Start();
while (cacheThreads.Count > )
{ }
stopwatch.Stop();
var time = stopwatch.ElapsedMilliseconds;
} public void ApplictionPool()
{ Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
while (applicationThreads.Count > )
{ }
stopwatch.Stop();
var time = stopwatch.ElapsedMilliseconds;
} //
// GET: /Home/
public ActionResult Index()
{
HttpContext.Application["Name"] = "张三";
HttpContext.Cache["Name"] = "张三";
for (int i = ; i < ; i++)
{
Thread threadApplication = new Thread(ApplicationTime);
threadApplication.Name = "Application" + i;
applicationThreads.Add(threadApplication);
threadApplication.Start();
} Thread applicationPool = new Thread(ApplictionPool);
applicationPool.Start(); for (int i = ; i < ; i++)
{
Thread threadCache = new Thread(CacheTime);
threadCache.Name = "Cache" + i;
cacheThreads.Add(threadCache);
threadCache.Start();
} Thread cachePool = new Thread(CachePool);
cachePool.Start(); return View();
}
我起了100个线程,每个线程读取次缓存,Application:37,Cache:8;如果读取次数增大,差距就更大
2、可以设置不同的缓存依赖策略
string path = Server.MapPath("/Test/Power.xml");
CacheDependency cacheDependency=new CacheDependency(path);
HttpContext.Cache.Insert("power", "权限", cacheDependency);
Power.xml文件变化,缓存就失效了!
HttpContext.Cache 详解的更多相关文章
- (转)MyISAM Key Cache详解及优化
原文:http://huanghualiang.blog.51cto.com/6782683/1372721 一.MyISAM Key Cache详解: 为了最小化磁盘I/O,MyISAM将最频繁访问 ...
- Guava Cache详解
适用性 缓存在很多场景下都是相当有用的.例如,计算或检索一个值的代价很高,并且对同样的输入需要不止一次获取值的时候,就应当考虑使用缓存 Guava Cache与ConcurrentMap很相似,但也不 ...
- HTML5应用程序缓存Application Cache详解
什么是Application Cache HTML5引入了应用程序缓存技术,意味着web应用可进行缓存,并在没有网络的情况下使用,通过创建cache manifest文件,可以轻松的创建离线应用. A ...
- 离线应用Application Cache详解
特点: 1.离线可访问 - 没有网络仍可访问整个应用 2.很小的服务器负载 - 缓存在本地,不需要到服务器请求 3.高速 ...
- spring cache 详解
Spring使用Cache 从3.1开始,Spring引入了对Cache的支持.其使用方法和原理都类似于Spring对事务管理的支持.Spring Cache是作用在方法上的,其核心思想是这样的:当我 ...
- 使用Free命令查看Linux服务器内存使用状况(-/+ buffers/cache详解)
free命令可选参数 -b,-k,-m,-g show output in bytes, KB, MB, or GB -h human readable output (automatic unit ...
- HTML5应用程序缓存Application Cache详解.RP
什么是Application Cache HTML5引入了应用程序缓存技术,意味着web应用可进行缓存,并在没有网络的情况下使用,通过创建cache manifest文件,可以轻松的创建离线应用. A ...
- Oracle内存详解之 Library cache 库缓冲
Oracle内存详解之 Library cache 库缓冲 2017年11月09日 11:38:39 阅读数:410更多 个人分类: 体系结构 Library cache是Shared pool的一部 ...
- Spring Boot 2.x基础教程:进程内缓存的使用与Cache注解详解
随着时间的积累,应用的使用用户不断增加,数据规模也越来越大,往往数据库查询操作会成为影响用户使用体验的瓶颈,此时使用缓存往往是解决这一问题非常好的手段之一.Spring 3开始提供了强大的基于注解的缓 ...
随机推荐
- 双向循环链表的Java版本实现
1.单项循环列表 单向循环链表是单链表的另一种形式,其结构特点是链表中最后一个结点的指针不再是结束标记,而是指向整个链表的第一个结点,从而使单链表形成一个环.和单链表相比,循环单链表的长处是从链尾到链 ...
- (原创)关于SQL Server 2005 的自动远程数据库备份
由于项目需要,需要对目标服务器上的数据库每天进行备份并转移,查阅网上的一些帮助,结合自己的实际需要,写了这篇文章,希望对有同样需求的朋友有所帮助.目标服务器:192.168.1.197,备份服务器:1 ...
- 【Prince2科普】Prince2七大主题之概论
[Prince2科普]Prince2七大主题之概论 PRINCE2的七大主题,就是项目管理中持续关注的七个方面,分别是: 1.商业论证 2.组织 3.质量 4.计划 5.风险 6.变更 7.进展 ...
- [课程设计]Sprint Two 回顾与总结&发表评论&团队贡献分
[课程设计]Sprint Two 回顾与总结&发表评论&团队贡献分 ● 一.回顾与总结 (1)回顾 燃尽图: Sprint计划-流程图: milestones完成情况如下: (2)总结 ...
- viewport 详解
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale= ...
- sql基本操作
SQL功能 数据查询 SELECT 数据定义 CREATE, DROP, ALTER 数据操纵 INSERT, UPDATE, DELETE 数据控制 GRANT, REVOKE 创建 ...
- linux 防火墙配置
vi /etc/sysconfig/iptables # Generated by iptables-save v1. :: *nat :PREROUTING ACCEPT [:] :POSTROUT ...
- 查看数据源所对应的PSA物理表
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- QT mainwindow四件套
最近在学习QT.下面总结一下mainwindow的设置步骤. 使用的平台为vs2013+qt5.3.2+qt-vs-addin1.2.3 1)安装软件 首先安装vs2013,这个不多介绍. 然后安装q ...
- 解决服务器时间Local time和RTC time不一致的问题
今天遇到了一个问题,发现程序读取的时间比实际的时间快了几分钟. 执行 timedatectl status 发现 Local time比实际的快,但是RTC time是准确的. 各种google也没搞 ...