Мое приложение использует EF5 с DbContext и около 100 классов сущностей. Инициализация первого экземпляра контекста занимает около 5 секунд и около 1 секунды для первого запроса. После создания предварительно скомпилированных запросов необходимое время сократилось до 4,5 секунд и 0,1 секунды.EF5 CodeFirst производительность запуска: создать модель edmx во время компиляции?
Итак, кажется, что поколение представлений особенно ускоряет первый запрос. Но первая инициализация контекста, по-видимому, приносит пользу только из-за прекомпилированных запросов.
В моем понимании EF создает модель EDMX из классов сущностей во время выполнения. Возможно, это вызывает задержку при запуске. Я хотел бы как можно больше перемещаться из стартового поколения для компиляции времени. Почему программа должна вычислять вещи одинаково при каждом запуске?
Если сгенерированные данные зависят, например, от строки подключения, Я хотел бы хранить их один раз для каждой отдельной зависимости. Возможно, есть какое-то свойство, содержащее сгенерированные данные, которые я могу сериализовать в файл и загрузить его снова, чтобы подавить задержку запуска?
Когда я просматриваю таблицу миграции баз данных, в ней содержится закодированный и сжатый EDMX. Кажется, это будет сравниваться с текущим, чтобы определить изменения схемы. Чтобы архивировать это, EF должен генерировать EDMX при каждом запуске. Снова и снова ..... Этого я люблю кэшировать для ускорения.
Во время выполнения, когда приложение может доверять схеме базы данных, является текущим, Я думаю, что EF должен просто использовать эту базу данных, хранящуюся в EDMX, в любом случае?
Я случайно назвал «предварительно скомпилированные представления» с «запрошенными запросами». Фактически я использую эту оптимизацию. Но он получил только около 20% преимущество. –
Используете ли вы .NET 4.5? –
Да, я использую .NET 4.5 –