Будет ли контекст бд удаляться автоматически, если страница перенаправляется внутри блока using?

Недавно я обнаружил, что одно из наших веб-приложений загружает процессор и утечку памяти, я пытаюсь выяснить причину, приведенный ниже код похож на страницу с наибольшим временем загрузки, может кто-нибудь, пожалуйста, скажите мне, что-то не так с кода, я подозреваю, что объект dbcontext не удаляется, когда оператор if совпадает и перенаправляет на другую страницу.

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

Вместо того, чтобы гадать, пожалуйста, профиль свой код, чтобы определить, что и где протекает.

Damien_The_Unbeliever 10.09.2018 08:21

@Damien_The_Unbeliever благодарит за ваше предложение, не могли бы вы порекомендовать какие-либо инструменты, с которых я могу начать.

Syed Waqas 10.09.2018 08:36

Что означает эта строка TABLE1 Existing = dbContext.TABLE1.Where (R => R.IsComplete) .FirstOrDefault (); Заменить на условие R => R.IsCompleted ==.

Asif Raza 10.09.2018 11:30

Вы можете использовать бесплатную версию Stackify Prefix для профилирования ваших запросов, включая время выполнения запросов к базе данных, выполняемых внутри каждого запроса. Это не полный профилировщик для вашего кода, но может быть очень полезен для измерения на уровне функционального блока.

Tian van Heerden 10.09.2018 15:19

@AsifRaza - предоставленный код отлично работает, если пользователь хочет узнать первую строку, в которой поле IsComplete истинно. .Where(r=>r.IsComplete) эквивалентен .Where(r=>r.IsComplete == true). Напротив, .Where(r=>!r.IsComplete) эквивалентен .Where(r=>r.IsComplete == false). Это не причина соответствия OP.

Tommy 10.09.2018 15:24
1
5
69
2

Ответы 2

Ваш dbContext удаляется, как только выполнение покидает область видимости. Поэтому я не вижу проблем с этим кодом. Оператор using, скомпилированный в оператор try-finaly, который вызывает метод dispose для вашего объекта в блоке finalaly. Для получения дополнительной информации см. Ссылку ниже. https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/using-statement

Это не похоже на проблему с контекстом БД, поскольку он выходит за рамки сразу после сохранения изменений. Проблема может быть связана либо с базой данных, либо с тем, как вы написали конструктор для databaseEntities. Использование всегда будет вызывать finally, и область действия обязательно закончится.

Другие вопросы по теме