производительность структуры объекта - PullRequest
2 голосов
/ 04 декабря 2009

Я использую Entity Framework для создания слоя в моей базе данных SQL Server 2008. EF присутствует в моем веб-сервисе, и веб-сервис вызывается клиентом Silverlight.

Я вижу серьезную проблему с производительностью с точки зрения продолжительности выполнения запроса в EF. Это не произойдет в последовательных звонках.

Небольшое прибегание к поиску в Google показало, что для каждого домена приложения создается модель объектов db в памяти. Я нашел эту ссылку Microsoft , объясняющую предварительную генерацию представлений для повышения производительности. Даже после выполнения шагов производительность фактически снижается, а не улучшается. Мне любопытно, если кто-нибудь успешно попробовал этот подход и есть ли другие пути для повышения производительности.

Я использую .NET 3.5.

Ответы [ 4 ]

2 голосов
/ 04 декабря 2009

Пара областей, на которые следует обратить внимание на производительность EF

  1. Сделайте как можно больше обработки перед вызовом таких вещей, как tolist (). ToList принесет все в наборе в память. По умолчанию EF будет продолжать строить дерево выражений и обрабатывать его только тогда, когда вам нужны данные в памяти. Этот первый запрос будет к базе данных, но после этого обработка будет в памяти. При работе с большими данными вы определенно хотите, чтобы база данных выполняла как можно больше работы.
  2. EF 1 имеет возможность только вытащить весь ряд назад. Поэтому, если у вас есть столбец, представляющий собой большую строку или двоичный двоичный объект, он будет записан в память независимо от того, нужен он вам или нет. Вы можете создать прогноз, который не включает этот столбец, но тогда вы не получите преимуществ от того, что он будет сущностью.
  3. Вы можете посмотреть на sql, сгенерированный EF, воспользовавшись предложением в этом посте. Как просмотреть SQL, сгенерированный Entity Framework?
2 голосов
/ 04 декабря 2009

Для запросов EF применяются те же законы физики, что и для обычных SQL. Проверьте таблицы базы данных и убедитесь, что у вас есть индексы первичного и внешнего ключей, что база данных правильно нормализована и т. Д. Если производительность снижается после предложений Microsoft, то это мое предположение относительно проблемной области.

1 голос
/ 04 декабря 2009

Вы размещаете веб-сервис в IIS? Работает ли он на том же сайте, что и приложение Silverlight? Как насчет самой базы данных? Это работает на выделенной машине? Есть другие приложения, поражающие это? Первый вызов неактивной базы данных является болезненным (у меня были ситуации, когда в моей среде это могло бы истечь).

Здесь необходимо принять во внимание ряд факторов. Но это сводится не только к накладным расходам EF.

edit Я не был полностью готов, но процесс открытия первого соединения с SQL Server идет медленно, независимо от вашего решения для доступа к данным.

0 голосов
/ 04 декабря 2009

Используйте SQL Profiler, чтобы проверить, сколько запросов было выполнено для извлечения ваших данных. Если это большое число, используйте Include() метод ObjectQuery для извлечения дочерних объектов с родителем в одном запросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...