2017-01-30 18 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可以不用打电话就可以离开,甚至可以打电话但仍然关闭的实例。

相关问题