2010-02-23 132 views
6

我有一个初始化成本相对较高的对象,它提供了处理Web服务请求所需的线程安全计算方法。在Web服务调用之间共享对象实例

我正在寻找保持初始化实例在请求之间可用的最佳方法。

一种方法是将其声明为静态变量。它将保持可用,直到AppDomain被回收。

这是一个较早的Web服务,它不使用WCF,但如果提供更好的解决方案,转换是一个选项。

有没有更好的方法?

回答

2

如何缓存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); 
} 

这里我把它放在缓存中长达一个小时,但你可以根据需要改变它。

+0

缓存的生命周期是否独立于每个AppDomain的生命周期(AppDomain处理HTTP请求)? – 2010-02-24 07:16:44

+0

@Eric J.它独立于单个HTTP请求。换句话说,您的服务可以处理1000个请求,并且该对象将保留在缓存中。如果应用程序域回收(每天或您在IIS中设置的任何内容),则缓存的对象将被删除。同样,该对象不保证在缓存中保留它的过期时间,这取决于可用内存等。 – Keltex 2010-02-24 15:34:20

+0

因此,这本质上提供了与静态对象引用相同的生命周期,但增加了可以控制过期的灵活性IIS可以回收一些内存吗? – 2010-02-24 16:33:15