HttpContext.CacheとHttpRuntime.Cache

10720 ワード

Asp.Netではキャッシュを簡単に使用できますが、CacheではHttpContext.という2つの方法で呼び出されます.CacheとHttpRuntime.Cache.では、この2つのCacheにはどんな違いがありますか?
まずMsdnの注釈を見てみましょう:HttpRuntime.Cache:現在のアプリケーションのCacheを取得します.HttpContext.Cache:現在のHTTPリクエストのCacheオブジェクトを取得します.
では、HttpRuntimeについてですか.Cacheはアプリケーションレベルで、HttpContext.Cacheはユーザーごとに?NOであるが,実際には両者が同じオブジェクトを呼び出す.彼らの違いは呼び出し方が違うだけだ(私の知っている限り).
事実は雄弁に勝る.例を書いて証明する.



 
   
         /**/ ///   <summary>          ///   HttpRuntime.Cache Cache          ///   </summary>          private   void  btnHttpRuntimeCacheSave_Click( object  sender, System.EventArgs e)          ... {             HttpRuntime.Cache.Insert(cacheKey, cacheValue,  null , DateTime.Now.AddMinutes( 3 ), TimeSpan.Zero);         }          /**/ ///   <summary>          ///   HttpRuntime.Cache Cache          ///   </summary>          private   void  btnHttpRuntimeCacheLoad_Click( object  sender, System.EventArgs e)          ... {              if  (HttpRuntime.Cache[cacheKey]  ==   null )              ... {                 cacheContent  =   " No Cache " ;             }              else              ... {                 cacheContent  =  ( string )HttpRuntime.Cache[cacheKey];             }             lblCacheContent.Text  =  cacheContent;         }          /**/ ///   <summary>          ///   HttpContext.Cache Cache          ///   </summary>          private   void  btnHttpContextCacheSave_Click( object  sender, System.EventArgs e)          ... {             HttpContext.Current.Cache.Insert(cacheKey, cacheValue,  null , DateTime.Now.AddMinutes( 3 ), TimeSpan.Zero);         }          /**/ ///   <summary>          ///   HttpContext.Cache Cache          ///   </summary>          private   void  btnHttpContextCacheLoad_Click( object  sender, System.EventArgs e)          ... {              if  (HttpContext.Current.Cache[cacheKey]  ==   null )              ... {                 cacheContent  =   " No Cache " ;             }              else              ... {                 cacheContent  =  ( string )HttpContext.Current.Cache[cacheKey];             }             lblCacheContent.Text  =  cacheContent;         }

この例では簡単に証明できます.
  • HttpContext.Cacheが保存したCache,HttpContext.CacheとHttpRuntime.Cacheはすべて読み取ることができます. 
  • HttpRuntime.Cacheが保存したCache,HttpContext.CacheとHttpRuntime.Cacheはすべて読み取ることができます. 
  • どのユーザがどのようにCacheを変更しても、他のユーザがどのように読み取ったCacheコンテンツも変化する.

  •  
    HttpRuntime.Cacheはキャッシュの具体的な実装クラスに相当する、このクラスはSystemに置かれているが.Webネーミングスペースの下にあります.しかし、非Webアプリケーションも使用できます(コンソールなどの他のタイプも使用できます).HttpContext.Cacheは、上述したキャッシュクラスのカプセル化であり、HttpContextにカプセル化されているため、HttpContextを知っている限りでしか使用できない、すなわちWebアプリケーションにのみ使用できるようになっている.