何时在 ASP.NET MVC 应用程序生命周期中处理静态资源

When to dispose static resources in ASP.NET MVC application life-cycle

我们有一个 IDisposable 资源,尽管它是无状态和线程安全的,但实例化起来相对昂贵。所以...我们决定使用标准的单例模式进行包装,并为所有请求重新使用单个实例,直到应用程序池回收。

考虑到这一点,我们仍然希望尽可能以确定性方式调用 Dispose()。

问题...假设我们有机会在关机情况下优雅地处置此类资源,什么地方合适?例如...

对于上下文,应用程序是 ASP.NET MVC 4。

    protected void Application_Disposed(Object sender, EventArgs e)
    {
        CleanUpResources();
    }

或者……

    protected void Application_End(Object sender, EventArgs e)
    {
        CleanUpResources();
    } 

资源是托管的还是非托管的?如果是托管的,使用Application_End,否则使用Application_Disposed。有关详细信息,请参阅 https://msdn.microsoft.com/en-us/library/ms178473.aspx

据我所知,挂钩应用程序结束事件的最可靠方法是 IRegisteredObject。我不知道 Application_End.

的可靠性