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 .