2009-08-13 4 views
2

Je suis en train d'écrire une structure de navigation de catégories. Chaque catégorie a un ID, qui est situé dans un outil de recherche tiers. Au début de l'application, ou à divers intervalles, je dois obtenir les répertoires et leurs identifiants, et les stocker dans un dictionnaire (ou d'une autre manière) afin que je puisse y accéder pour la réécriture de lien d'id à nommer.La meilleure façon de mettre en cache un dictionnaire dans C#

+0

Quel est le contexte de l'application? Code client? Chargez le serveur Web équilibré? La mise en cache a différentes meilleures solutions dans différents cas. – Precipitous

+0

Il s'agit d'une application Web sur un seul serveur. Je pense que la meilleure option en termes de quand, est au démarrage de l'application. – mickyjtwin

Répondre

1

Conservez le dictionnaire dans un fichier XML à l'aide d'un format qui ressemble à quelque chose comme ça et lire quand vous devez faire votre ré-écriture

<nodes> 
<node id="1">Some Nav Data</node> 
</nodes> 

Vous avez alors 2 options, écrivez un processus distinct qui sera mettre à jour le fichier à des intervalles spécifiques ou votre processus actuel peut mettre à jour le fichier après un intervalle défini. Si vous estimez que le chargement et l'analyse de XML sont exagérés, pensez à sérialiser une classe sur un disque contenant une table ou un dictionnaire de hachage simple.

0

De combien de paramètres parlez-vous? Pourquoi avez-vous besoin d'un cache plutôt que d'utiliser un dictionnaire en mémoire avec un thread d'arrière-plan pour le recharger régulièrement?

Si vous avez besoin d'un cache, vous pouvez regarder le caching application block dans EntLib. Vous pouvez définir un intervalle d'expiration, puis handle an even on expiry pour repeupler le cache. Mais franchement, cela semble exagéré pour vos besoins.

+0

Il y aurait environ 70 catégories avec leurs identifiants associés – mickyjtwin

+0

Essentiellement, lors d'une recherche, dans les résultats viendra une collection d'identifiants relatifs aux critères de recherche. Ces identifiants seront un nom de catégorie. J'ai besoin de mapper l'identifiant au nom afin que je puisse écrire une URL amicale. De même, dans l'autre sens, une requête entrante doit mapper le nom. Cela doit être disponible pour la vie de l'application, et ne changera pas très souvent, c'est-à-dire des jours, voire des semaines. – mickyjtwin

+1

Cela ne ressemble pas à beaucoup de données - y a-t-il une raison pour laquelle vous ne pouvez pas le garder en mémoire? Ou cherchez-vous d'autres installations? – serialhobbyist

0

La mise en cache est un très gros sujet! Vous pouvez utiliser un cache local si vous êtes dans un projet Web. Vous pouvez utiliser HttpContext.Current.Cache si vous êtes dans un environnement Windows (même si vous n'avez pas vraiment besoin de cache dans une application Windows). Si vous couvrez plus d'un serveur Web, vous pouvez utiliser la puissance de MemCached ou de MemCached Win32. Si cela ne vous dérange pas d'utiliser de nouvelles choses, vous pouvez également jeter un oeil à Velocity (qui est la réponse de MS à la supériorité de MemCache depuis plusieurs années dans le domaine de la mise en cache).

Voici quelques messages SO qui pourraient vous intéresser:

System.Web.Caching vs. Enterprise Library Caching Block

Running a Asp.net website with MS SQL server - When should i worry about scalability?

Questions connexes