2009-06-02 3 views
5

Je souhaite utiliser la mise en cache de données sur mon application .net C#. Jusqu'à présent, j'ai ajouté la mise en cache de données et ajouté des dépendances de cache sql sur des tables spécifiques. Mais ce n'est pas assez bon. Ces tables seront mises à jour trop fréquemment mais pas pertinentes pour beaucoup d'objets mis en cache. Cela rendra la mise en cache des données quasiment inutile car elle sera fréquemment vidée. Je veux implémenter la dépendance du cache sql sur des lignes spécifiques pour chaque objet. Comment puis je faire ça?Comment créer une dépendance de cache sql spécifique à une ligne?

+0

La documentation aspnet_regsql ne mentionne que les tables, mais avez-vous essayé d'utiliser contre une vue? Je doute que cela fonctionnera, mais il pourrait être vaut le coup. –

Répondre

5

Vous devez comprendre le fonctionnement de SqlDependency. Vous subscribe a result set and get notified when that result set has changed. Vous pouvez vous abonner à n'importe quel type de jeu de résultats, c'est-à-dire n'importe quel type de requête, à condition qu'il soit conforme au restrictions of the supported statements. Cela ne fait vraiment aucune différence si c'est une table ou une vue.

Donc, techniquement, vous pouvez vous abonner à des notifications spécifiques en soumettant une requête spécifique pour cette ligne, c'est à dire. avec une clause WHERE codée en dur. Vous devrez modifier votre code pour extraire et mettre en cache uniquement les données nécessaires rangée par ligne plutôt que de récupérer des tables entières et de les mettre en mémoire cache. Heck, vous auriez à faire de toute façon si vous êtes au moins préoccupé par la taille de ces tables. La mise en cache de tables entières ne doit être effectuée que pour les données de catalogue et de référence qui changent rarement ou pas du tout.

Vous pouvez également choisir de récupérer et mettre en cache des partitions de données, par exemple. des plages de clés individuelles (disons entre 'A' et 'D', 'E' et 'H', etc.) et vous abonner pour être notifié pour cette partition de données spécifique

Si vous voulez understand how SqlDependency works, mon blog contient des articles , y compris common programming pitfalls of SqlDependency et deployment problems with SqlDependency.

+0

BTW quand je dis « hardcoded WHERE » Je ne veux pas coder les clés de recherche, vous pouvez utiliser @parameters OK, ce que je voulais dire, c'est que vous devez ajouter une clause WHERE pour limiter le résultat à vos lignes d'intérêt. –

Questions connexes