快捷搜索:

USE HttpRuntime.Cache OVER HttpContext.Current.Cache

缓存是在ASP.NET开拓中常常必要用到在技巧,在应用历程中,平日会用到HttpRuntime.Cache和HttpContext.Current.Cache。而且在应用历程中,平日会感觉这两个彷佛用哪一个都行,都能达到缓存数据的目的。那么这两个Cache到底有什么不合呢?在什么时刻用哪一个对照好呢?这里谈谈我的一些懂得和见地吧。

两者的异同

先来看看msdn的解释

HttpContext.Cache : Gets the ASP.NET Cache object for the current request

HttpContext.Current : Gets the HttpContext object for the current request

从这个解释看,获得的Cache工具是当前哀求的Cache工具。小我觉得,这个解释有点误导性,会让人误以为这时的Cache工具只是对付当前的Request的。而轻细想一下之后,就会发明这种理解是差错的。假如Cache的内容只对当前的Request有用,那有何须缓存呢?

既然msdn得解释不可,那就直接看源代码吧,^_^,用Reflector打开HttpContext.Cache, 可以看到

public Cache Cache

{

get

{

return HttpRuntime.Cache;

}

}

从这代码可以看出,两者返回的都是是一样的。

难道这两者真的就完全一样吗?再来看看HttpContext.Current

public static HttpContext Current

{

get

{

return (ContextBase.Current as HttpContext);

}

}

ContextBase的源代码:

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.Cache来造访Cache存在着险些可以轻忽不计的类型转换历程。而对付非Web项目来说,将ContextBase.Current转换为HttpContext就会返回null。除此之外,调用HttpContext还必要一些而外的查谋事情,必要解析当前正在运行的的线程和当前的context。不过,小我觉得这点小小的额外的事情应该不会带来什么机能问题。

HttpRuntime.Cache可以用在非Web项目中

这听起来有点怪怪的,呵呵,HttpRuntime的Cache居然可以用在非Web项目中。然则事实恰是如斯,必要做的只不过是把System.Web这个dll加到我们项目中来就好了。

您可能还会对下面的文章感兴趣: