Я использую EF6 rc1 со стратегией Code First без предварительно скомпилированных представлений, и проблема такова: Если я компилирую и запускаю exe-приложение, для запуска первого запроса требуется 15 секунд (это нормально, так как я все еще работаю над предварительно сгенерированными представлениями). Но если я использую Visual Studio 2013 Preview для отладки точно такого же приложения, он занимает почти 2 минуты, прежде чем запускать первый запрос:
Dim Context = New MyEntities()
Dim Query = From I in Context.Itens '' <--- The debug takes 2 minutes in here
Dim Item = Query.FirstOrDefault()
Есть ли способ удалить это дополнительное время? Я здесь что-то не так?
Ps: Сам контекст не сложный, его просто полный 200 + таблиц.
Изменить: выяснилось, что проблема заключается в том, что во время отладки EF, похоже, генерирует представления, игнорируя предварительно сгенерированные. Используя исходный код из 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, нажмите кнопку и сравните время загрузки.