none
CodeFirst очень медленное первое обращение к БД RRS feed

  • Вопрос

  • Всем привет!

    Использую VS2012, WPF, EntityFramework - подход CodeFirst.

    После запуска приложения, любое первое обращение к базе длится 30 секунд!!!

    В базе всего 5 небольших таблиц.

    Я так пониманию, что в это время инициализируется DataContext. Но не могу понять, что он делает столько времени?!

    16 сентября 2014 г. 13:12

Ответы

  • "Строки с Audit logout занимают много времени, но мне это мало о чем говорит ((" - да .Но, возможно наоборот, у вас соединение к БД занимает столько времени, если она у вас находится удалённо. Если нет, используйте профайлер Visual Studio.

    "Не понял про загрузку символов." - если вы запускаете приложение вместе с отладчиком студии, то студия при соответствующих настройках пытается тянуть символы отладки с интернета.


    Сделаем содержимое сообщества лучше, вместе!

    18 сентября 2014 г. 9:30
    Модератор
  • У вас там скорее всего не что то не так, так как 30 се. для данного случая не нормально. Поэтому и предлагаю использовать профайлер, чтобы посмотреть. А в целом к использованию ORM нужно относить с осторожностью, если нет опыта его использования.

    Сделаем содержимое сообщества лучше, вместе!

    17 сентября 2014 г. 9:04
    Модератор

Все ответы

  • Можете запустить профайлер студии и профайлер SQL Server там наглядно всё показывается. А в целом да, вы правы происходит инициализация.

    Сделаем содержимое сообщества лучше, вместе!

    16 сентября 2014 г. 15:35
    Модератор
  • Получается, что CodeFirst не жизнеспособен в WPF?

    30 сек. для 5 таблиц это непозволительно долго ((

    17 сентября 2014 г. 8:55
  • У вас там скорее всего не что то не так, так как 30 се. для данного случая не нормально. Поэтому и предлагаю использовать профайлер, чтобы посмотреть. А в целом к использованию ORM нужно относить с осторожностью, если нет опыта его использования.

    Сделаем содержимое сообщества лучше, вместе!

    17 сентября 2014 г. 9:04
    Модератор
  • WPF тут не причем, если вы все делаете по мануалу EF то все должно быть в порядке, и как показывает практика контексту достаточно примерно 900 миллисекунд как максимум  для обычной таблицы с 100 записями для инициализации и возвращение данных, и почему DataContext? Там ведь DbContext.

    Но я подозреваю дело в загрузке символов, студия обычно их загружает все время. Посмотрите что есть в окне "Вывод" и в ней выберите в комбобокс "Отладка"


    if (Thread.Was == HelpFul) Mark.As(HelpFul); else if (Thread.Was == Answered) Mark.As(Answered); else Provide(More.Details);




    17 сентября 2014 г. 11:26
  • Не понял про загрузку символов.

    Мой код крайне прост:

    ' Такая вот элементарная сущность Public Class Patient Public Property ID As Integer Public Property LastName As String Public Property FirstName As String Public Property MiddleName As String End Class ' Контекст данных Imports System.Data.Entity Public Class DataContext Inherits DbContext ' Всего одна таблица в БД Public Property Patients As DbSet(Of Patient) End Class ' Этот код запрашивает все две)) записи из таблицы

    ' и выполняется он целых 6 секунд. Using db As New DataContext Me.dGrid.DataContext = db.Patients.Local db.Patients.ToList() End Using ' Если сделать так: Using db As New DataContext db.Database.Initialize(True) db.Patients.ToList() End Using - то долго выполняется НЕ запрос данных, а именно инициализация. И чем больше таблиц, тем дольше длится инициализация.



    18 сентября 2014 г. 7:51
  • В SQL Server Profiler посмотрел результат выполнения db.Database.Initialize(True):

    http://social.msdn.microsoft.com/Forums/getfile/534440 

    Строки с Audit logout занимают много времени, но мне это мало о чем говорит ((



    18 сентября 2014 г. 8:54
  • "Строки с Audit logout занимают много времени, но мне это мало о чем говорит ((" - да .Но, возможно наоборот, у вас соединение к БД занимает столько времени, если она у вас находится удалённо. Если нет, используйте профайлер Visual Studio.

    "Не понял про загрузку символов." - если вы запускаете приложение вместе с отладчиком студии, то студия при соответствующих настройках пытается тянуть символы отладки с интернета.


    Сделаем содержимое сообщества лучше, вместе!

    18 сентября 2014 г. 9:30
    Модератор