我有一个IIS应用程序,它有一个长寿命的单例。在极少数情况下,这个单例在尝试获取资源时会挂起。众所周知,回收应用程序池将导致资源再次可用。假设应用程序本身可以使用StopWatch
或类似事件捕获此罕见事件,那么应用程序本身中的事件处理程序可以回收应用程序池吗?这是一件非常严峻的事情,但它比直到下一次IIS计划回收更好。挂起的原因与该资源及其与IIS的交互有关,我无法解决这个问题。请注意,获取资源的调用是同步的。如果是,请提供有关如何操作的信息。
对评论的回应 关于Restarting the Application Domain and Recycling the Application Pool我的观察是重新启动应用程序域是导致挂起的原因之一。 资源 是一个不守规矩的原生dll ,由我自己以外的代码加载。也许我找到一个API来卸载和加载unruly unmanaged dll 。但是现在,我已经手动而不是以编程方式回收应用程序池以恢复操作。
在回收应用程序池时,调用Singleton的析构函数,并且在调用外部API之后,资源,Dispose()处于良好状态,可能是卸载,但我还是验证了