2010-11-19 10 views
0

J'ai un référentiel qui extrait à la fois la base de données et parfois un cache.Problème httpcache

Pour implémenter cela, j'ai créé une interface ICacheWrapper qui permet au référentiel d'utiliser HttpRuntime.Cache, AppFabric, peu importe. classes concrètes de la ICacheWrapper prennent généralement le cache dans leur constructeur comme ceci: nouveau HttpCacheWrapper (HttpRuntime.Cache)

Le constructeur de la mise en pension prend une référence à une enveloppe de cache comme ceci:

myRepo = new Repo(new HttpCacheWrapper(HttpRuntime.Cache)); 

Si je crée 2 repos, le cache est-il profondément copié? Je ne le pense pas, mais nos problèmes de performance indiquent le contraire. Ai-je manqué quelque chose ici?

Merci pour toute aide!

Répondre

0

Que voyez-vous? Que fait HttpCacheWrapper avec le HttpRuntime.Cache il est passé?

Je soupçonne que ce que vous voyez à la place est une politique de cache qui tient sur des choses trop longues pour le taux que les choses sont en cache. Comme l'a dit Raymond Chen, «une politique de cache incorrecte est indiscernable d'une fuite de mémoire».

La façon dont je voudrais isoler ceci est d'essayer de tester avec un seul repo en utilisant la politique que vous avez. Voyez si vos problèmes de performances apparaissent.

Si ce n'est pas le cas, alors créez le 2ème dépôt et surveillez de près l'utilisation de la mémoire.

+1

Les résultats d'un peu plus de recherche/refactoring: Il semble que les listes de choses qui sont extraites du cache soient servies à partir d'un seul cache, ce qui est bon. Cette liste est filtrée pour répondre aux besoins du formulaire Web qui l'a demandé. Ensuite, la liste filtrée est liée à l'interface Web. Ce qui semble se passer, c'est que la liste filtrée est créée en plus de la liste mise en cache et que ni l'une ni l'autre ne sont promptement modifiées. –