gpt4 book ai didi

wcf - NHibernate查询缓存和WCF

转载 作者:行者123 更新时间:2023-12-04 18:24:16 24 4
gpt4 key购买 nike

我已经为我的一个查询启用了查询缓存,当我运行测试或控制台应用程序时,它运行良好(查询结果来自查询缓存,实体来自二级缓存)。
但是,如果我通过WCF服务运行相同的查询,则永远不会命中缓存。

我还检查了这两种情况下的日志,直到缓存未命中,它们实际上是相同的。

这是显示缓存放置的NH的日志:

[25,4244] 16:15:18,237 DEBUG[NHibernate.Cache.StandardQueryCache]: caching query results in region: 'NHibernate.Cache.StandardQueryCache'; sql: <MyQuery>; parameters: <MyParameter>;    first row: 0
[25,4244] 16:15:18,238 DEBUG[NHibernate.Caches.SysCache.SysCache]: adding new data: key=NHibernate-Cache:NHibernate.Cache.StandardQueryCache:sql: <MyQuery>; parameters: <MyParameter> ; first row: 0@-891130694&value=System.Collections.Generic.List`1[System.Object]


这是NH的日志,显示缓存未命中:

[25,4244] 16:15:29,089 DEBUG[NHibernate.Cache.StandardQueryCache]: checking cached query results in region: 'NHibernate.Cache.StandardQueryCache'; sql: <MyQuery>; parameters: <MyParameter>; first row: 0
[25,4244] 16:15:29,089 DEBUG[NHibernate.Caches.SysCache.SysCache]: Fetching object 'NHibernate-Cache:NHibernate.Cache.StandardQueryCache:sql: <MyQuery>; parameters: <MyParameter>; first row: 0@519257116' from the cache.
[25,4244] 16:15:29,095 DEBUG[NHibernate.Cache.StandardQueryCache]: query results were not found in cache: sql: <MyQuery>; parameters: <MyParameter>; first row: 0


这是NH的日志,显示了不在WCF服务中时缓存命中的情况:

[11,3656] 17:37:48,718 DEBUG[NHibernate.Cache.StandardQueryCache]: checking cached query results in region: 'NHibernate.Cache.StandardQueryCache'; sql: <MyQuery>; parameters: <MyParameter>; first row: 0
[11,3656] 17:37:48,718 DEBUG[NHibernate.Caches.SysCache.SysCache]: Fetching object 'NHibernate-Cache:NHibernate.Cache.StandardQueryCache:sql: <MyQuery>; parameters: <MyParameter>; first row: 0@-369095952' from the cache.
[11,3656] 17:37:48,728 DEBUG[NHibernate.Cache.StandardQueryCache]: Checking query spaces for up-to-dateness <MyTableName>
[11,3656] 17:37:48,729 DEBUG[NHibernate.Caches.SysCache.SysCache]: Fetching object 'NHibernate-Cache:UpdateTimestampsCache:<MyTableName>@-1403193414' from the cache.
[11,3656] 17:37:48,729 DEBUG[NHibernate.Cache.StandardQueryCache]: returning cached query results for: sql: <MyQuery>; parameters: <MyParameter>; first row: 0


这是我用来执行查询的代码:

    using (ISession session = SessionFactory.OpenSession())
using (ITransaction transaction = session.BeginTransaction())
{
IList<T> entities = session
.CreateCriteria(typeof(T))
.SetCacheable(true)
.Add(expression)
.List<T>();
transaction.Commit();
return entities;
}


为什么未命中缓存?

最佳答案

您确定不为每个请求重新创建SessionFactory吗?还是您通常不需要进行不必要的重新初始化?

关于wcf - NHibernate查询缓存和WCF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1531990/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com