【发布时间】:2015-09-28 21:32:12
【问题描述】:
我在 ASP.NET MVC 应用程序中引用了第 3 方库,因为库的设计,它需要一个类(比如 ClassA),它必须只实例化一次,并且应该在使用后处理掉。因此,在我的 MVC 应用程序中,我定义了一个静态类并在内部实例化了外部 ClassA(ClassA 被大量使用)。但是处理ClassA 的单个实例的有效方法是什么?我相信Application_End 不是正确的地方。但在什么情况下或方法是正确的?
我应该考虑iisreset、应用程序池回收和服务器停止或重新启动的任何其他情况,并确保资源得到正确处置。
【问题讨论】:
-
需要处理的资源是什么?如果流程结束,您确定还需要做其他事情吗?您将如何应对(例如)停电?
-
你确定吗?这些本机资源是否会在进程终止时被终止,例如网络连接、Win32 对象等?再说一遍——如果停电,你就没有机会处理这些资源了,会发生什么?
-
@JonSkeet,同意我不能处理所有情况(例如停电),但我想尽力处理所有可以处理的情况。我希望所有的原生资源都会被操作系统自动杀死。但是,在IIS应用程序池回收等情况下,进程并没有终止,而是所有的请求和响应都被搁置了,不确定这是不是资源没有被释放的问题。
-
如果 AppDomain 消失,其中的所有对象都可以被垃圾回收。如果库已正确编写(使用 SafeHandle 或终结器等),应该全部正确收集。您可以使用 AppDomain.DomainUnload,但听起来并不理想。也许你应该问制作图书馆的第三方?基本上,“需要处理的单身人士”是一种非常非常丑陋的模式。
-
你可以试试这样的:stackoverflow.com/a/13258842/2649492
标签: c# asp.net .net asp.net-mvc