2017-01-30 19 views

回答

0

如果您的應用程序池被回收所有靜態對象將被重置。您可以在創建靜態字典的實例時清除所有外部資源(如文件或...)。是這樣的:

public static partial class ProjectValues 
{ 
    public static ConcurrentDictionary<string, string> MessageDictionary { private set; get; } 


    static ProjectValues() 
    { 
     try 
     { 
      MessageDictionary = new ConcurrentDictionary<string, string>(); 
      //then clear the resource here 
     } 
     catch (Exception ex) 
     { 
      return; 
     } 
    } 
} 
0

有沒有什麼方法(例如事件)的,我可以檢測 應用程序池被回收?

有點。

根據Phill Haack,IIS公開了一種名爲HostingEnvironment.RegisterObject的靜態方法,該方法允許您將IRegisteredObject的實現傳遞給它。

從理論上講,這告訴IIS調用IRegisteredObject.Stop操作它決定殺死你的應用程序是在運行W3wp.exe進程之前。

我的理論,因爲這種做法是故障安全和有說在完成清理之前,AppDomain可以不用打電話就可以離開,甚至可以打電話但仍然關閉的實例。

相關問題