2014-02-25 47 views
1

我正在Durandal編寫應用程序。 (C#是服務器端,Javascript + HTML是客戶端)。爲什麼在一段時間後刪除對象

在服務器端,我創建了一個CacheManager類。

我強迫這個類有一個單一實例(單例)。在課堂上我有一個叫cache的成員。這是包含我的應用程序數據的字典。當用戶打開和關閉應用程序時,數據在運行時累積。

這裏是我的代碼:

public class CacheManager 
{ 
    #region Singleton 
    // static holder for instance, need to use lambda to construct since constructor private 
    private static readonly Lazy<CacheManager> _instance = new Lazy<CacheManager>(() => new CacheManager()); 

    // private to prevent direct instantiation. 
    private CacheManager() 
    { 
     Cache = new Dictionary<string, object>(); 
    } 

    // accessor for instance 
    public static CacheManager Instance 
    { 
     get 
     { 

      return _instance.Value; 
     } 
    } 

    public Dictionary<string, object> Cache { get; set; } 

    #endregion 
    //...continue application code 
} 

但是,如果它是一個漫長的時間,因爲發送到服務器,接下來的時間上的最後一個請求時請求到達時,它發現了字典對象空!

看起來像c#中的對象具有有限的生命週期,並且當這段時間結束時,單例被重新初始化,並且字典接受一個新的空實例。

+2

很長一段時間?如果它開始一天,IIS可能會回收你的應用程序池 –

+0

我不在IIS上運行,我正在開發中 – user2783091

+0

你在哪裏測試你的應用程序? IIS Express是VS2012及更高版本的默認Web瀏覽器(當您按F5/ctrl + F5時)。 –

回答

3

如果沒有請求達到某個時間或達到內存限制或只是某個超時,IIS將重新啓動應用程序池進程。

+0

我還沒有在IIS上運行,我正處於開發階段。以及其他建議 - 「或者達到了內存限制或者僅僅是一些超時。」 - 你能否更多地瞭解它? – user2783091

+0

關於應用程序池回收 - http://www.iis.net/configreference/system.applicationhost/applicationpools/add/recycling –

+0

不,我寫信給你,我知道「關於應用程序池回收」不是問題因爲我不喜歡在IIS上運行,我要求你解釋更多的內容「達到的內存限制或只是一些超時」。 – user2783091

相關問題