Я пытаюсь улучшить производительность в приложении, которое интенсивно использует Linq2Sql.Я нашел конкретный метод, который действительно медленный.Это противное, вложенное, .Sum()
утверждение.При выполнении для возврата данных требуется чуть более 30 секунд.Всего строк данных может быть 3000. Если я возьму sql, сгенерированный LinqPad, и запустю его, я верну данные менее чем за секунду.
Я в недоумении относительно того, что вернется сюда.Это должно быть отфильтровано предложением where, верно?Я также представляю, что это будет работать изнутри.начиная с где, затем суммируйте все результаты, затем суммируйте каждый в T2, затем суммируйте каждый в T1.
ParentTable.Table1.Sum
(
t1=>
t1.Table2.Sum
(
t2=>
t2.Table3.Where(t3=>t3.Table4.Id==275).Sum(t3=>t3.Score)
)
)
Чтобы усложнить ситуацию, LinqPad может выполнить тот же оператор менее чем за полсекунды.
Наверное, мой вопрос: почему такая разница в скоростях Linq2Sql и TSql?Linq возвращает все строки и фильтрует их в окне приложения?
Теперь веб-приложение повторно использует один и тот же DataContext в течение всего времени сеанса пользователей.У меня всегда было впечатление, что вы должны избавляться от него после каждой операции.Может ли это быть проблемой?
Позвольте мне добавить, что при профилировании SQL (при запуске из приложения) мне не о чем беспокоиться.Чтения <15, загрузка ЦП <5, запись - ничто, длительность - не более 20. Поэтому я уверен, что это не выполнение операторов, а некоторая обработка, выполняемая LINQ2Sql. </p>