Я использую Entity Framework 6.1 с ASP.NET 4.7 MVC5 и C # и службами приложений Azure.
Я использую ObjectContext для моей установки Entity Framework, в отличие от DbContext
Я использую такие команды, как:
Context.Basetable.OfType<Entity1>().Any();
Context.Basetable.OfType<Entity2>().Any();
«Базовая таблица» является общей, а «Entity1», «Entity2» и т. Д. Являются объектами, которые имеют определенные свойства, используемые кодом.
Каждый объект может содержать до 5 сложных типов, каждый из которых имеет до 10 свойств.
Когда я первоначально звоню:
Context.Basetable.OfType<Entity1>().Any();
Это занимает около 14 секунд, что, по моему мнению, связано с генерацией базового SQL в Entity Framework. Когда снова вызывается та же самая линия, время занимает около 30 мс
Процесс «Just In Time» не обязательно будет проблемой, но если перезапустить App Pool, тогда процесс прогрева начнется снова. Есть ли способ развернуть предварительно сгенерированный базовый код SQL, чтобы избежать затрат на разогрев JIT?
Заранее спасибо.
EDIT
Похоже, предварительная генерация представлений - это путь, и для этой цели есть отличный маленький инструмент. Однако это представляется актуальным только для DbContext, а не для ObjectContext.
https://docs.microsoft.com/en-us/ef/ef6/fundamentals/performance/pre-generated-views
EDIT2
Я провел дальнейшие исследования, и у меня есть предварительно сгенерированный Entity SQL, хотя предварительно сгенерированный ESQL довольно сложный. Даже с предварительно сгенерированным видом я изначально получаю это 15-секундное наказание. Что происходит после предварительно сгенерированного представления?
1) JIT-компиляция предварительно сгенерированного представления в скомпилированный C #?
2) SQL-запрос на компиляцию SQLServer?