我有一个运行查询 5000 次的简单测试。查询的linq版本占用HQL的3倍,缓存的Linq版本明显慢于缓存的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>();
林克:
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>())