HttpRuntime.cache



1、2つの実装コードの違い:
私たちは使います.NET Reflectorは、HttpContextクラスのCacheプロパティを見て、次のコードを表示します.
   
   
   
   
public Cache Cache { get { return HttpRuntime.Cache; } }

したがって,両者はコード的に完全に一致する.
二、両者の違いは実はHttpContextにある.Current
使用するNET Reflector HttpContext.を見るCurrentは次のとおりです.
   
   
   
   
public static HttpContext Current { get { return (ContextBase.Current as HttpContext); } }

ContextBaseクラスの静的プロパティCurrentは次のとおりです.
   
   
   
   
internal static object Current { get { return CallContext.HostContext; } }

CallContextクラスの静的プロパティHostContextは次のとおりです.
   
   
   
   
public static object HostContext { get { IllogicalCallContext context1 = Thread.CurrentThread.GetIllogicalCallContext(); object obj1 = context1.HostContext; if (obj1 == null) { LogicalCallContext context2 = CallContext.GetLogicalCallContext(); obj1 = context2.HostContext; } return obj1; } }

明らかに、非WebアプリケーションHttpContext.Currentがnullを返すのは
ContextBase.Current as HttpContextという文は、nullを返します.
ContextBase.Currentは値がありますが、Webアプリケーションではないため、返されたObjectはHttpContextに変換できずnullに戻ります.
だから、HttpContext.Current.Cacheは、Webアプリケーションのキャッシュにのみ使用できます.しかもHttpContextと密接につながっています.
三、HttpRuntime.Cacheは、非Webアプリケーションのキャッシュに使用できます.
例えば、私の次のコンソールプログラムは、正常にキャッシュを読み書きすることができます.ここではもちろんHttpContextを使用することはできません.Cacheの.
   
   
   
   
static void Main( string [] args) { System.Web.Caching.Cache c = System.Web.HttpRuntime.Cache; if (c != null) { c.Insert("1", "123141432432"); object o = c.Get("1"); Console.WriteLine(o); } Console.ReadLine(); }

まとめて、
1、HttpRuntime.Cacheはキャッシュの具体的な実装クラスに相当する、このクラスはSystemに置かれているが.Webネーミングスペースの下にあります.しかし、Webアプリケーションでなくても使えます.
2、HttpContext.Cacheは、上述したキャッシュクラスのカプセル化であり、HttpContextにカプセル化されているため、HttpContextを知っている限りでしか使用できない、すなわちWebアプリケーションにのみ使用できるようになっている.
所属する条件を総合して、できるだけHttpRuntime.HttpContextではなくCacheCache .