2010-02-23 144 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