Я использую 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, нажмите кнопку и сравните время загрузки.
Это общая проблема, которая страдает EF в течение некоторого времени, я думал, что они собирались обратиться к этому в EF6 .. но, возможно, не .. Одна вещь EF6 предоставляет это возможность разбить модель в несколько моделей, что может быть вашим лучшим выбором. –
http://entityframework.codeplex.com/wikipage?title=Multi-tenant%20Migrations –
Нарушение во многих контекстах ничего не изменило.Все контексты следуют за «правилом», поэтому для их загрузки требуется почти одно и то же время, если я не загружаю по требованию, но мне нужно загрузить их все, так как между ними существует много внешних ключей. –