在 BuildWebHost 周围使用 "using" 语句?

Use "using" statement around BuildWebHost?

在 ASP.NET Core 2.x 中,最佳做法是在应用程序的主入口点调用一个名为 BuildWebHost 的方法(请参阅 MSDN 文章 Hosting in ASP.NET Core):

public class Program
{
    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .Build();
}

IWebHostIDisposable,所以本着成为优秀 .NET 公民的精神,是否建议用 using 语句包围 BuildWebHost

public class Program
{
    public static void Main(string[] args)
    {
        using (var host = BuildWebHost(args))
        {
            host.Run();
        }
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .Build();
}

没有。按原样使用它。 IWebHost 实现了 IDisposable 因为它是并且可以以其他方式使用,您可能需要手动处理它。然而,在这里的上下文中,它是整个套件和 kaboodle。它在程序启动时创建,并一直使用到程序结束。

作为稍微好一点的解释,请理解处理资源的唯一原因是在应用程序继续 运行 时将它们从内存中移除 。最终,无论您是否处置,GC 都会清除废弃的资源,但您永远不应该依赖 GC 在您之后进行清理。如果您不再需要某个资源,您可以处置它,以再次减少应用程序的持续资源负载,当它继续 运行.

当您的应用程序结束时,所有关联的资源都会随之消失,因为它们都与流程相关联。如果没有进程,那么 RAM 中就没有任何剩余。因此,为什么没有必要在这种情况下手动处理 IWebHost 。因为在应用程序结束之前都需要它,而当应用程序结束时,它就会完全消失,无论如何,手动处理不会给你带来任何好处。