HttpContext.Cache에 대한 자세한 설명

10466 단어 문맥
HttpContext.Cache 하면 필연적으로 Application 을 생각하게 되는데 공통점과 차이점이 무엇인지 하나씩 살펴보도록 하겠습니다.

  • 동일:

  • 1. 둘 다 키-값 쌍을 사용하여 객체를 저장합니다.
    2. 둘 다 동일한 수명 주기를 갖는 애플리케이션(캐시가 캐시 정책을 설정하지 않은 경우)

  • 차이

  • 1. 잠금 방법: 응용 프로그램은 잠금 및 잠금 해제를 사용하여 더티 작업을 제어합니다.
    캐시 내부 자동 잠금 및 고효율
    우리는 간단한 비교를 수행합니다. 테스트는 999999번 읽습니다. 이것은 단일 스레드일 뿐입니다.
     

      public void ApplicationTime()
    
            {
    
                for (int i = 0; i < 999999; i++)
    
                {
    
                    var s = HttpContext.Application["Name"];
    
                }
    
            }
    
    
    
            public void CacheTime()
    
            {
    
    
    
                for (int i = 0; i < 999999; 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;

    응용 프로그램 긴: 1373 캐시 긴: 925
    하나의 쓰레드는 너무 많은 문제를 설명할 수 없습니다. 멀티 쓰레드를 살펴보겠습니다.

       public  List<Thread> applicationThreads = new List<Thread>();
    
           public List<Thread> cacheThreads = new List<Thread>();
    
    
    
            public void ApplicationTime()
    
            {
    
                for (int i = 0; i < 19999; i++)
    
                {
    
                    var s = HttpContext.Application["Name"];
    
                }
    
                applicationThreads.Remove(Thread.CurrentThread);
    
            }
    
    
    
            public void CacheTime()
    
            {
    
                for (int i = 0; i < 19999; i++)
    
                {
    
                    var s = HttpContext.Cache["Name"];
    
                }
    
                cacheThreads.Remove(Thread.CurrentThread);
    
            }
    
    
    
            public void CachePool()
    
            {
    
                Stopwatch  stopwatch=new Stopwatch();
    
                stopwatch.Start();
    
                while (cacheThreads.Count > 0)
    
                {
    
    
    
                }
    
                stopwatch.Stop();
    
                var time = stopwatch.ElapsedMilliseconds;
    
            }
    
    
    
            public void ApplictionPool()
    
            {
    
    
    
                Stopwatch stopwatch = new Stopwatch();
    
                stopwatch.Start();
    
                while (applicationThreads.Count > 0)
    
                {
    
    
    
                }
    
                stopwatch.Stop();
    
                var time = stopwatch.ElapsedMilliseconds;
    
            }
    
    
    
    
    
            //
    
            // GET: /Home/
    
            public ActionResult Index()
    
            {
    
                HttpContext.Application["Name"] = "张三";
    
                HttpContext.Cache["Name"] = "张三";
    
                for (int i = 0; i < 100; 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 = 0; i < 100; 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개의 스레드를 시작했고 각 스레드는 캐시를 19999번 읽습니다. 애플리케이션: 37, 캐시: 8; 읽기 횟수가 증가하면 격차는 더 커집니다.
    2. 다른 캐시 종속성 전략을 설정할 수 있습니다.

     string path = Server.MapPath("/Test/Power.xml");
    
                CacheDependency  cacheDependency=new CacheDependency(path);
    
                HttpContext.Cache.Insert("power", "权限", cacheDependency);

    Power.xml 파일이 변경되었습니다. 캐시가 잘못되었습니다!
     
     
     

    좋은 웹페이지 즐겨찾기