【发布时间】:2021-01-26 23:46:43
【问题描述】:
当希望使用 OWIN 处理 IDisposable 对象时,广泛建议使用主机提供的 CancellationToken,如果它可用,如下所示:
var context = new OwinContext(builder.Properties);
var token = context.Get<CancellationToken>("host.OnAppDisposing");
if (token != CancellationToken.None)
{
token.Register(() =>
{
disposable.Dispose();
});
}
我已经使用foreach 中的上述代码注册了大约 12 个要处置的对象,我发现其中一些对象将全天被调用,给我留下一些资源 MIA,而其他对象则保持不变什么都没发生。
不幸的是,host.OnAppDisposing 和 CancellationToken 本身的文档提供的信息很少。前者没有提到生命周期,后者没有提到对Register的限制。
在 IIS 上运行的长期运行的 ASP.NET 应用程序中,是否有一致且有据可查的方法来处理资源处置?
【问题讨论】:
-
默认情况下,我们每 29 小时回收一次 IIS 中的应用程序池。 Aspnet_wp.exe 进程将继续运行,直到您结束任务、重新启动 IIS 或重新启动计算机。你可以参考这个链接:docs.microsoft.com/en-us/troubleshoot/aspnet/high-memory-level