У меня есть простой тест, который запускает запрос 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>())