2010-11-07 7 views
1

En utilisant NHibernate, comment puis-je vérifier si la requête que j'exécute existe déjà dans le cache de requêtes ou non par programmation?Comment vérifier si une requête existe dans le cache de requête?

+2

Le but des caches de haut niveau est qu'ils soient transparents. –

+0

@Diego: J'ai la fonction A() qui, lorsqu'elle est appelée sur une requête non mise en cache, prendra beaucoup de temps mais aura un moyen très efficace d'accéder au cache. D'autre part, j'ai la fonction B() qui est plus rapide lors du chargement à partir de la base de données (et donc enregistre la requête sur le cache) mais ne récupère pas à partir du cache. Donc j'ai besoin de savoir si c'est déjà en cache ou non. –

+0

Si vous avez besoin d'un tel contrôle granulaire, utilisez le cache sous-jacent manuellement au lieu du cache de requête. –

Répondre

1

Jetez un oeil à http://msdn.microsoft.com/en-us/library/ms174283.aspx. Cet article a un échantillon qui récupère le plan de requête pour une requête spécifique (sous la section « A. Suppression d'un plan de requête à partir du cache de plan »):

SELECT plan_handle, st.text 
FROM sys.dm_exec_cached_plans 
WHERE text LIKE N'SELECT * FROM Person.Address%'; 

Ceci est cependant pas intégré dans NHibernate et vous devrez connaître le code SQL pour votre requête.

0

Une manière simple est de lancer SQL Profiler. Si vous voyez la requête frapper la base de données alors ce n'est pas dans le cache.

+0

Bonne idée mais je voulais dire comment faire cela par programme. –