2009-10-07 5 views
3

내 쿼리 중 하나에 대해 쿼리 캐시를 사용하도록 설정 했으므로 테스트 또는 콘솔 응용 프로그램을 실행할 때 쿼리 캐시와 엔티티를 두 번째 수준 캐시에서 가져 와서 쿼리 결과를 가져옵니다. 그러나 WCF 서비스를 통해 동일한 쿼리를 실행하면 캐시가 손상되지 않습니다.NHibernate 쿼리 캐시 및 WCF

두 경우 모두 로그를 확인했으며 캐시가 손실 될 때까지 실제로 동일합니다.

다음
[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: [email protected]&value=System.Collections.Generic.List`1[System.Object] 

은 NH의 로그가 캐시 미스 보여주는 것 : 여기

캐시 넣어 보여주는 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: [email protected]' 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: [email protected]' 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 

여기에 쿼리를 수행하는 사용하고 코드는 다음과 같습니다

왜 캐시에 히트되지 않습니까?

답변

1

각 요청마다 SessionFactory을 다시 만들지 않습니까? 또는 일반적으로 불필요한 재 초기화 작업을 수행하고 있지 않습니까?

+1

예, 단일 세션 팩토리가 있습니다. 하지만 새 세션을 만들지 만 불필요한 재 초기화로 인해 무슨 뜻입니까? –