我想知道我做这种工作是否正确?
这是一个简单的例子。
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项目。
答案 0 :(得分:1)
就数据库连接问题而言 .NET为您在应用程序中使用的每个连接字符串维护一个连接池, 出于性能原因(因为打开和关闭连接通常在性能方面可能是昂贵的)。 该池具有特定的最小和最大大小(由MinPoolSize和MaxPoolSize连接字符串参数控制)。 当你打开一个连接(通过SqlConnection.Open) - 它可能会从池中取出而不是真的重新打开。 当您关闭连接时(也通过处理EF上下文完成) - 连接可能会被放入池中,而不是真正关闭。 当连接空闲一段时间后,它可能会从池中删除。