猿问

如果页面在 using 块内被重定向,DB Context 会被自动处理吗?

最近我发现我们的一个网络应用程序出现 CPU 峰值和内存泄漏,我试图找出原因,下面的代码类似于加载时间最长的页面,有人可以告诉我有什么问题吗代码,我怀疑当 if 语句匹配并重定向到另一个页面时,dbcontext 对象没有被释放。


using (databaseEntities dbContext = new databaseEntities())

{

    TABLE1 Existing = dbContext.TABLE1.Where(R => R.IsComplete).FirstOrDefault();

    if (Existing != null)

    {

        return RedirectToAction("SecondView");

    }


    TABLE1 obj = new TABLE1();


    obj.Name = "Name";

    obj.City = "City";

    obj.Date_Created = DateTime.Now;


    dbContext.TABLE1.Add(obj);

    dbContext.SaveChanges();

}


斯蒂芬大帝
浏览 182回答 2
2回答

幕布斯7119047

执行离开范围后,您的 dbContext 立即处置。所以我认为这段代码没有任何问题。using 语句编译为 try-finaly 语句,该语句在 finaly 块中调用对象的 dispose 方法。有关更多信息,请参阅下面的链接。https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/using-statement

catspeake

数据库上下文似乎不是问题,因为它在保存更改后就超出了范围。问题可能出在数据库或您为 databaseEntities 编写构造函数的方式上。using 将始终调用 finally 并且范围肯定会结束。
随时随地看视频慕课网APP
我要回答