Как повысить производительность EF Linq to Entities - PullRequest
2 голосов
/ 25 ноября 2011

Я использую asp.net 4 c # и EF 4.

Я профилирую свое приложение.У меня есть этот код, который дает дорогой результат.

Я хотел бы знать, если вы знаете лучший способ написать его.Мне нужно ускорить его.

            string htmlhead = context.CmsOptions.SingleOrDefault(op => op.OptionId == 7).Value;
            if (htmlhead != null)
                uxHtmlHead.Text = htmlhead;
            else
                uxHtmlHead.Text = "No Html Head.";

Спасибо

Полезная статья http://weblogs.asp.net/zeeshanhirani/archive/2010/09/20/which-one-is-faster-singleordefault-or-firstordefault.aspx

Ответы [ 2 ]

13 голосов
/ 25 ноября 2011

Использовать FirstOrDefault() ... Это завершится, как только будет найден результат.

С другой стороны SingleOrDefault() ищет во всей коллекции один результат и выдает исключение, если находит более одного результата для запроса

1 голос
/ 25 ноября 2011

Есть несколько основных шагов, которые вы можете предпринять при оптимизации запроса Entity Framework.

Здесь вы можете найти список всех опций.

Те, которые япредложил бы в вашем случае:

  • NoTracking.Вы только получаете сущность для получения значения.Не для его изменения, поэтому вам не нужно отслеживать изменения
  • Предварительно скомпилируйте ваш запрос.Это простой шаг, и он действительно дает вам повышение производительности
  • Возвращает правильный объем данных.Вы выбираете целую сущность только для того, чтобы получить ее значение свойства.Если вы выберете только свойство Value, то с SQL Server будет возвращено меньше данных (кстати, ваш код выдаст пустое исключение, если CmsOption не может быть найден из-за части First / Single -OrDefault. Если вы действительно знаете, чтохотя бы одна сущность удаляет часть OrDefault)

Если вы используете Visual Studio Premium, вы можете поместить этот код в модульный тест, а затем профилировать модульный тест.После каждого изменения вы можете сравнивать отчеты, чтобы убедиться, что вы улучшаете производительность.

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