21

Я использую EF6 rc1 с кодовой стратегией, без предварительно скомпилированных представлений, и проблема такова: Если я компилирую и запускаю exe-приложение, 15 секунд для запуска первого запроса (это нормально, так как я все еще работаю над предварительно сгенерированными представлениями). Но если я использую Визуальный просмотр Студия 2013 отладить точно такое же приложение, оно занимает почти 2 минуты перед запуском первого запроса:EF6/Code First: Супер медленный во время первого запроса, но только в Debug

Dim Context = New MyEntities() 
Dim Query = From I in Context.Itens '' <--- The debug takes 2 minutes in here 
Dim Item = Query.FirstOrDefault() 

Есть ли способ, чтобы удалить это дополнительное время? Я здесь что-то не так?

Пс .: Сам контекст не сложный, его просто полный 200+ таблиц.

Редактировать: обнаружено, что проблема заключается в том, что во время отладки EF, по-видимому, генерирует представления, игнорируя предварительно сгенерированные. Используя исходный код из ФВ я обнаружил, что свойства:

IQueryProvider IQueryable.Provider 
    { 
     get 
     { 
      return _provider ?? (_provider = new DbQueryProvider(
               GetInternalQueryWithCheck("IQueryable.Provider").InternalContext, 
               GetInternalQueryWithCheck("IQueryable.Provider").ObjectQueryProvider)); 
     } 
    } 

где время потребляется. Но это странно, поскольку для отладки требуется только время. Я что-то упустил?

Редактировать: Найдено больше информации, связанной с вопросом: Использование Process Monitor (Sysinternals) Я выяснил, что существует его процесс desenv.exe, который потребляет массу времени. Чтобы быть более конкретным, это время его потребления с помощью «Thread Exit». Он повторяет стек потока выхода 36 раз. Я не знаю, действительно ли эта информация очень полезна, но я сохранил «.cvs» со стеком, вот его тело: [...] (отредактируйте: удалил тело «.cvs», я могу опубликовать его снова по комментариям, если кто-то действительно считает его полезным, но он был запутанным и слишком большим.)

Редактирование: Установленный VS2013 Ultimate и Entity Framework 6 RTM. Установил бета-версию 4 Power Tools платформы Entity Framework и использовал ее для создания представлений. Ничего не изменилось ... Если я запустил exe, это займет 20 секунд, если я начну отладку, это займет 120 секунд.

Редактировать: Создал небольшой проект для моделирования ошибки: http://sdrv.ms/16pH9Vm Просто запустите проект внутри среды и непосредственно через .exe, нажмите кнопку и сравните время загрузки.

+0

Это общая проблема, которая страдает EF в течение некоторого времени, я думал, что они собирались обратиться к этому в EF6 .. но, возможно, не .. Одна вещь EF6 предоставляет это возможность разбить модель в несколько моделей, что может быть вашим лучшим выбором. –

+0

http://entityframework.codeplex.com/wikipage?title=Multi-tenant%20Migrations –

+0

Нарушение во многих контекстах ничего не изменило.Все контексты следуют за «правилом», поэтому для их загрузки требуется почти одно и то же время, если я не загружаю по требованию, но мне нужно загрузить их все, так как между ними существует много внешних ключей. –

ответ

12

Это известная проблема с производительностью в Lazy (которую использует EF) при подключении отладчика. В настоящее время мы работаем над исправлением (текущий подход, на который мы смотрим, устраняет использование Lazy). Мы надеемся скоро отправить это исправление в выпуск исправлений. Вы можете отслеживать ход этой проблемы на нашем сайте CodePlex - http://entityframework.codeplex.com/workitem/1778.

Более подробная информации о предстоящем релизе 6.0.2 патча, который будет включать в себя исправление здесь - http://blogs.msdn.com/b/adonet/archive/2013/10/31/ef6-performance-issues.aspx

+0

Спасибо, так как это ошибка, которую я узнаю как ответ и отслеживаю работу workplex codeplex. –

+2

У этого патча все еще есть проблемы с производительностью для меня. –

-1

Я не знаю, если вы нашли решение. Но в моем случае у меня была аналогичная проблема, которая впустую пропустила меня примерно через неделю после того, как я попробовал разные предложения. Наконец, я нашел решение, изменив свой web.config на optimizeCompilations = "true", и производительность резко улучшилась с 15-30 секунд до 2 секунд.

 Смежные вопросы

  • Нет связанных вопросов^_^