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#
Répondre
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.
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.
Il y aurait environ 70 catégories avec leurs identifiants associés – mickyjtwin
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
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
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?
- 1. Meilleure façon de mettre en cache les données
- 2. Quelle est la meilleure façon de mettre en cache des fichiers en php?
- 3. System.Xml.XmlDocument, quelle est la meilleure façon de mettre en cache une DTD de dépendance externe?
- 4. Quelle est la meilleure façon de mettre en cache un système de menu localement, dans le navigateur?
- 5. Quelle est la meilleure façon de mettre en cache un contrôle utilisateur ou ses données associées dans asp.net mvc
- 6. Quelle est la meilleure façon de mettre à l'échelle un octet de façon uniforme?
- 7. La meilleure façon de mettre en œuvre un «trouver mon plus proche» dans ma webapp
- 8. meilleure façon de mettre en œuvre un écran Splash Win32 C++
- 9. Quelle est la meilleure façon d'enregistrer un RichTextFile en C#?
- 10. Quelle est la meilleure façon de mettre en évidence un champ obligatoire sur un formulaire Web?
- 11. Meilleure façon de mettre en sandbox Apache sur Linux
- 12. La meilleure façon de mettre en cache des données persistantes (par exemple des livres de code) au printemps?
- 13. La meilleure façon de désactiver la mise en cache du client
- 14. Meilleure façon de mettre à jour dans Linq To SQL
- 15. La meilleure façon de transformer un entier en un nom de mois en C#?
- 16. Quelle est la meilleure façon de définir toutes les valeurs dans un dictionnaire C# <string,bool>?
- 17. La meilleure façon de mettre en œuvre une procédure stockée avec recherche en texte intégral
- 18. const Dictionnaire en C#
- 19. La meilleure façon de créer un DateTime Midnight in C#
- 20. La meilleure façon de mettre à jour dans un db une liste de mails
- 21. C# façon à imiter Python Dictionnaire Syntaxe
- 22. Quelle est la meilleure façon de "mettre en carré" une image dans .NET?
- 23. Dans Erlang, quelle est la meilleure façon de mettre à niveau un système distribué?
- 24. La façon la plus élégante de convertir un tableau de chaînes en un dictionnaire de chaînes
- 25. Quelle est la meilleure façon d'écrire un tableau court [] dans un fichier en C#?
- 26. bouclez Dictionnaire en C#
- 27. Quelle est la meilleure façon d'écrire [0..100] en C#?
- 28. Quelle est la meilleure façon de remplacer du texte dans un fichier en utilisant C#/.NET?
- 29. Quelle est la meilleure façon de formater C# dans WordPress?
- 30. Quelle est la meilleure façon de permettre à un utilisateur de rechercher un fichier en C#?
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
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