使用"使用"关于BuildWebHost的声明?

时间:2018-04-06 16:50:25

标签: asp.net-core-2.0 idisposable

在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公民的精神,建议用BuildWebHost语句包围using吗?

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();
}

1 个答案:

答案 0 :(得分:1)

没有。按原样使用它。 IWebHost实现IDisposable因为它可以以其他方式使用,您可能需要手动处理它。但是,在这里的背景下,它是整个套件和kaboodle。它在程序启动时创建,并在程序结束前继续使用。

作为稍微好一点的解释,请理解处理资源的唯一原因是在应用程序继续运行时将其从内存中删除。无论您是否处置,GC最终都会摆脱废弃的资源,但您不应该依赖GC来清理。如果您不再需要资源,则为了减少应用程序的持续资源负载而对其进行处置,再次继续运行

当您的申请结束时,所有相关资源都会随之消失,因为它们都与流程相关联。如果没有进程,则RAM中没有任何内容。因此,为什么在这种情况下手动处理IWebHost是不必要的。因为在应用程序结束之前需要它,并且当应用程序结束时,它将完全消失,无论如何,手动处理都不会给你带来任何收获。