Самостоятельно отслеживаемые объекты с предварительно созданными представлениями - PullRequest
1 голос
/ 08 июня 2010

В настоящее время я использую объекты самообследования .NET Entity Framework, однако я бы хотел ускорить выполнение запросов.

Первое, что всем кажется, это сгенерировать представления для модели во время компиляции.

Используя файлы ssdl и т. Д., Я смог создать 'MyModel.Views.cs', который скомпилирован в моем проекте. Однако я не видел никакой пользы от этого, что это когда-либо? Я что-то здесь упускаю? Разве я не получаю выгоду от этого, если я использую объекты самообследования?

Какими еще способами можно повысить производительность с помощью Entity Framework? Как я могу создать предварительно скомпилированные представления, но снабдить их параметрами? Например, поисковый запрос должен принимать различные параметры, но его можно сделать быстрее!

Спасибо

Ответы [ 2 ]

0 голосов
/ 07 июля 2010

Предварительно созданные представления всегда используются независимо от того, какой запрос вы используете. Позвольте мне объяснить, что такое предварительно сгенерированные взгляды. Когда вы впервые запрашиваете модель данных объекта, она преобразуется в представления esql. Это первый шаг, который выполняется во время выполнения и по запросу при запросе модели. После создания этого представления оно кэшируется на весь срок действия домена приложения. Однако создание представления является единовременной, как и сайт asp.net, который получает первый удар, когда кто-то заходит на ваш сайт в первый раз. Вы экономите время для первого пользователя, но после этого это действительно то же самое. Вы должны предусмотреть предварительную генерацию представлений, только если ваша модель имеет большие размеры и высокую стоимость запуска для первого запроса. Есть много способов улучшить производительность самоконтроля сущности и EF в целом. В моей книге есть целая глава, в которой говорится об улучшении производительности в EF.

0 голосов
/ 08 июня 2010

Хорошо, помните, что предварительно созданные представления помогают только для определенных операций. Они помогают для запросов, которые создаются самой Entity Framework. Например, если вы делаете Load для связанного свойства, будет использоваться предварительно сгенерированное представление, если оно доступно. Если, с другой стороны, вы выполняете проекцию или пользовательский вызов Where, предварительно созданные представления не могут использоваться, поскольку они не представляют ваш пользовательский запрос. Так что это зависит от того, что вы делаете.

Преимущество предварительной генерации представления в том, что оно близко к бесплатному. Немного повредив файл проекта, вы получите повышение производительности при выполнении определенных операций. Но это не делает все быстрее.

...