.NET在控制器上处理DBContext处理操作

问题描述 投票:1回答:1

我想知道我是否正确做这种工作?

这是一个简单的例子。

public class HomeController : Controller
{
    MYDBContext db = new MYDBContext();

    public ActionResult Index()
    {
        //do some thing with db here
        return View("~/Views/Home/Index.cshtml");
    }

    protected override void Dispose(bool disposing)
    {
        if (disposing)
        {
            db.Dispose();
        }
        base.Dispose(disposing);
    }
}

所以,我正在控制器的顶部创建一个db对象。在控制器处理时处理它?

我想知道是否因为未关闭的数据库连接而导致内存泄漏?

编辑:这是一个MVC项目。

c# .net entity-framework
1个回答
1
投票

就数据库连接问题而言,.NET为您在应用程序中使用的每个连接字符串维护一个连接池,这是出于性能原因(因为打开和关闭连接通常可能在性能方面成本很高)。该池具有特定的最小和最大大小(由MinPoolSize和MaxPoolSize连接字符串参数控制)。当你打开一个连接(通过SqlConnection.Open) - 它可能会从池中取出而不是真的重新打开。当您关闭连接时(也通过处理EF上下文完成) - 连接可能会被放入池中,而不是真正关闭。当连接空闲一段时间后,它可能会从池中删除。

© www.soinside.com 2019 - 2024. All rights reserved.