我有一个简单的测试,运行一个查询5000次。使用linq版本的查询所需时间是HQL的3倍以上,而缓存的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: 缓存:不到一秒 无缓存:5秒钟 LINQ: 缓存:8秒钟 无缓存:15秒钟
我只是想确认一下,我正在经历一些预期的开销,而不是我做错了什么。
如果有这样的额外负担,并且我没有太多可以做的事情,您能否建议一种折中方案,需要较少的字符串但提供更好的性能?
注意:
我的Fluent Nhibernate缓存设置为
.Cache(c => c.UseQueryCache().UseSecondLevelCache().UseMinimalPuts().ProviderClass<HashtableCacheProvider>())