提到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 详解的更多相关文章

  1. (转)MyISAM Key Cache详解及优化

    原文:http://huanghualiang.blog.51cto.com/6782683/1372721 一.MyISAM Key Cache详解: 为了最小化磁盘I/O,MyISAM将最频繁访问 ...

  2. Guava Cache详解

    适用性 缓存在很多场景下都是相当有用的.例如,计算或检索一个值的代价很高,并且对同样的输入需要不止一次获取值的时候,就应当考虑使用缓存 Guava Cache与ConcurrentMap很相似,但也不 ...

  3. HTML5应用程序缓存Application Cache详解

    什么是Application Cache HTML5引入了应用程序缓存技术,意味着web应用可进行缓存,并在没有网络的情况下使用,通过创建cache manifest文件,可以轻松的创建离线应用. A ...

  4. 离线应用Application Cache详解

    特点:     1.离线可访问            - 没有网络仍可访问整个应用     2.很小的服务器负载  - 缓存在本地,不需要到服务器请求     3.高速                 ...

  5. spring cache 详解

    Spring使用Cache 从3.1开始,Spring引入了对Cache的支持.其使用方法和原理都类似于Spring对事务管理的支持.Spring Cache是作用在方法上的,其核心思想是这样的:当我 ...

  6. 使用Free命令查看Linux服务器内存使用状况(-/+ buffers/cache详解)

    free命令可选参数 -b,-k,-m,-g show output in bytes, KB, MB, or GB -h human readable output (automatic unit ...

  7. HTML5应用程序缓存Application Cache详解.RP

    什么是Application Cache HTML5引入了应用程序缓存技术,意味着web应用可进行缓存,并在没有网络的情况下使用,通过创建cache manifest文件,可以轻松的创建离线应用. A ...

  8. Oracle内存详解之 Library cache 库缓冲

    Oracle内存详解之 Library cache 库缓冲 2017年11月09日 11:38:39 阅读数:410更多 个人分类: 体系结构 Library cache是Shared pool的一部 ...

  9. Spring Boot 2.x基础教程:进程内缓存的使用与Cache注解详解

    随着时间的积累,应用的使用用户不断增加,数据规模也越来越大,往往数据库查询操作会成为影响用户使用体验的瓶颈,此时使用缓存往往是解决这一问题非常好的手段之一.Spring 3开始提供了强大的基于注解的缓 ...

随机推荐

  1. JSTL函数

    JSTL包含了一系列标准函数. 引入:<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functi ...

  2. python之redis

    Redis简单介绍 如果简单地比较Redis与Memcached的区别,大多数都会得到以下观点:1 Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构 ...

  3. 深度优先搜索(DFS)

    定义: (维基百科:https://en.wikipedia.org/wiki/Depth-first_search) 深度优先搜索算法(Depth-First-Search),是搜索算法的一种.是沿 ...

  4. jQuery表单元素非空验证

    <script type="text/javascript">                $(function(){          /************* ...

  5. CSS3的chapter1

    初学CSS3的第一天,虽然之前有接触过CSS,不过好像是CSS2,我也上网了解了一下CSS3,新增了很多强大的元素,也让我更有兴趣去学习了. CSS(Cascading Style Sheets) 层 ...

  6. javascript Demo

    var vm=(function(){ var name="jasper"; var changename=function(v){ name=v; }; return { nam ...

  7. Knockout 新版应用开发教程之创建view models与监控属性

    最近抽出点时间研究MVVM,包括司徒正美的avalon,google的angular,以及Knockout,博客园Tom的Knockout指南 时隔2年了,ko更新了不少,所以文档也相应的变化了,所以 ...

  8. Linux_命令_积累

    1.ps 查看进程状态 ZC: "ps -a" 和 "ps a" 有区别... (具体查看 "man ps") 1.1.ps aux 1.2 ...

  9. .ipynb文件 与ipython notebook

    没有安装ipython notebook 后看见.ipynb文件直接手足无措了 一.安装ipython notebook 使用命令 pip ipython [all] 为所有用户安装 ipython ...

  10. 协同过滤 CF & ALS 及在Spark上的实现

    使用Spark进行ALS编程的例子可以看:http://www.cnblogs.com/charlesblc/p/6165201.html ALS:alternating least squares ...