6
我有一个初始化成本相对较高的对象,它提供了处理Web服务请求所需的线程安全计算方法。在Web服务调用之间共享对象实例
我正在寻找保持初始化实例在请求之间可用的最佳方法。
一种方法是将其声明为静态变量。它将保持可用,直到AppDomain被回收。
这是一个较早的Web服务,它不使用WCF,但如果提供更好的解决方案,转换是一个选项。
有没有更好的方法?
我有一个初始化成本相对较高的对象,它提供了处理Web服务请求所需的线程安全计算方法。在Web服务调用之间共享对象实例
我正在寻找保持初始化实例在请求之间可用的最佳方法。
一种方法是将其声明为静态变量。它将保持可用,直到AppDomain被回收。
这是一个较早的Web服务,它不使用WCF,但如果提供更好的解决方案,转换是一个选项。
有没有更好的方法?
如何缓存HttpRuntime.Cache
中的对象?
MyObject val = (MyObject)HttpRuntime.Cache["MyCacheKey"];
if (val == null)
{
val = // create your expensive object here
HttpRuntime.Cache.Insert("MyCacheKey", val, null,
DateTime.Now.AddSeconds(3600),
System.Web.Caching.Cache.NoSlidingExpiration);
}
这里我把它放在缓存中长达一个小时,但你可以根据需要改变它。
缓存的生命周期是否独立于每个AppDomain的生命周期(AppDomain处理HTTP请求)? – 2010-02-24 07:16:44
@Eric J.它独立于单个HTTP请求。换句话说,您的服务可以处理1000个请求,并且该对象将保留在缓存中。如果应用程序域回收(每天或您在IIS中设置的任何内容),则缓存的对象将被删除。同样,该对象不保证在缓存中保留它的过期时间,这取决于可用内存等。 – Keltex 2010-02-24 15:34:20
因此,这本质上提供了与静态对象引用相同的生命周期,但增加了可以控制过期的灵活性IIS可以回收一些内存吗? – 2010-02-24 16:33:15