У меня есть простой тест, который запускает запрос 5000 раз. Версия linq запроса занимает в 3 раза больше HQL, а кэшированная версия Linq значительно медленнее, чем кешированная версия HQL
HQL:
session.CreateQuery(String.Format("from Episode where SeriesId='{0}' and SeasonNumber='{1}' and EpisodeNumber='{2}'", seriesId, seasonNumber, episodeNumber))
.SetMaxResults(1)
.SetCacheable(true)
.UniqueResult<Episode>();
Linq:
session.Query<Episode>()
.Where(c => c.SeriesId == seriesId && c.SeasonNumber == seasonNumber && c.EpisodeNumber == episodeNumber)
.Cacheable()
.FirstOrDefault();
Вот результаты
HQL: Cached: less than a second No-Cache: 5 seconds LINQ: Cached: 8 seconds No-Cache: 15 seconds
Я просто хочу убедиться, что я испытываю ожидаемые накладные расходы, а не то, что я делаю неправильно.
Если это над головой есть, и я не могу много сделать, можете ли вы предложить, возможно, среднюю площадку, которая потребует меньше строк, но обеспечит лучшую производительность?
Примечание:
Настройка кеша в Fluent Nhibernate
.Cache(c => c.UseQueryCache().UseSecondLevelCache().UseMinimalPuts().ProviderClass<HashtableCacheProvider>())