Модуль, который я разрабатываю, делает множество мелких выборок, вставок и обновлений.Модификации, сделанные командами в SubSonic.Query
пространстве имен ( ActiveRecord не является моим любимым оружием ), выглядят намного быстрее, чем запросы выбора объекта по идентификатору, написанные в LINQ
.
Itтребуется 7,15 с, чтобы выполнить следующий LINQ
запрос 1000 раз
long a = (
from u in UserCollection
where u.UserId == value
select u.UserId
).FirstOrDefault<long>();
В то время как всего лишь 2,38 с для тысячи прогонов Select
запроса
long a = new SubSonic.Query.Select(provider, "UserId").From<User>()
.Where<User>(x => x.UserId == value).ExecuteScalar<long>();
Мне потребовалось время, чтобы посмотретьпод капотом LINQ в SubSonic.Профилировщик говорит, что большая часть процессорного времени вызовов DbQueryProvider.Execute
расходуется в методе DbQueryProvider.GetExecutionPlan
- 64%.22% тратится в System.Linq.Expressions.Complie
, когда DbQueryProvider.Execute
использует только 6% времени.
Я полностью удовлетворен тем, как запросы SubSonic LINQ анализируются и компилируются.Однако было бы замечательно иметь средство компиляции для повторения запросов SubSonic LINQ, например System.Data.Linq.CompiledQuery
в Linq2Sql
.