Quelle est la différence entre le stockage d'une table de données dans Session vs Cache? Quels sont les avantages et les inconvénients?
Donc, s'il s'agit d'une simple page de recherche qui renvoie un résultat dans une table de données et la lie à une grille. Si l'utilisateur "a" recherche et l'utilisateur "b", est-il préférable de le stocker dans Session car chaque utilisateur aurait très probablement des résultats différents ou puis-je toujours stocker chacune de ses recherches dans Cache ou cela n'a-t-il pas de sens car il y a un seul cache. Je suppose que ce que j'essaie de dire, c'est que le cache serait écrasé.
Une différence importante est que les éléments du cache peuvent expirer (seront supprimés du cache) après un laps de temps spécifié. Les éléments placés dans une session y resteront jusqu'à la fin de la session.
ASP.NET peut également supprimer des éléments du cache lorsque la quantité de mémoire disponible devient petite.
Autre différence: l'état de la session peut être maintenu externe (serveur d'état, serveur SQL) et partagé entre plusieurs instances de votre application web (pour l'équilibrage de charge). Ce n'est pas le cas avec le cache.
Outre ces différences (comme d'autres l'ont noté): la session est par utilisateur/session tandis que le cache est par application.
AFAIK, La principale différence est que la session est par utilisateur, tandis que le cache sera pour les éléments de portée d'application.
Comme indiqué dans les autres réponses, vous pouvez stocker les informations par utilisateur dans le cache, à condition de fournir une clé (soit par session, soit par cookie). Ensuite, vous auriez plus de contrôle pour expirer les éléments dans le cache et également définir des dépendances sur eux. Donc, si le DataTable en question va changer régulièrement, la mise en cache est probablement une option appropriée. Sinon, s'il s'agit d'une session statique, cela pourrait être plus approprié. Steven Smith a une excellente vidéo sur la mise en cache sur dnrtv qui vaut la peine d'être vérifiée.
Cela dépend vraiment de ce que vous essayez de réaliser, du temps dont vous disposez. Il existe d'autres alternatives à considérer en ce qui concerne la façon dont vous stockez l'état dans une application. Selon la taille de la table, vous pouvez envisager de stocker l'état dans un cookie (crypté s'il s'agit d'informations sensibles). Alternativement, s'il s'agit de données de portée d'application, vous utilisez à froid un champ statique sur une page ou une classe. Il y a aussi l'objet Application.
Mise à jour : Je pense que la question clé que vous devez vous poser est de savoir qui devrait voir ces données.
Are they going to access the data frequently?
(Non, ne t'embête pas).
Is it going to change?
(Non, utilisez un champ statique ou une application).
Is it acceptable for user a and user b to see the same results?
(Non, utilisez le cache avec une clé comprenant le nom d'utilisateur et le terme de recherche.).
(Oui, utilisez le cache en utilisant une clé du terme de recherche).
Honnêtement cependant, si vous n'êtes pas loin dans votre développement, j'envisagerais de stationner le problème de mise en cache/état à une date ultérieure - vous n'en aurez peut-être même pas besoin.
Les trois premières règles de réglage des performances sont les suivantes: 1. Mesurer, 2. Mesurer un peu plus. 3. Mesurez à nouveau ...
Une autre différence importante, l'état de session sera bloqué si des requêtes asynchrones Ajax simultanées sont exécutées, cela affectera les performances
Le cache est dans la portée de l'application dans le but de réduire le nombre de fois qu'un élément de données est obtenu. La session est dans la portée de la session d'un utilisateur dans le but de donner un état d'utilisateur particulier.
Eh bien, cela dépend de la façon dont vous avez configuré la session pour ASP.NET. Stockez-vous la session dans une base de données ou en mémoire? Si en mémoire utilisez-vous un serveur distinct ou utilisez-vous le serveur Web actuel pour la session?
Selon la façon dont les choses sont configurées pour vous, il peut y avoir des implications de performances lorsque vous utilisez quelque chose comme une table de données qui me dit que vous stockez peut-être de grandes quantités de données.
La session est également stockée par utilisateur et récupérée par utilisateur au moyen de son ticket de session qui est stocké dans un cookie de session ou sur l'URL s'ils n'acceptent pas les cookies et que vous avez configuré ASP.NET en mode sans cookies. Tout ce que vous mettez en cache sera mis en cache au niveau de l'application et sera disponible pour toutes les sessions utilisateur qui peuvent ou non être ce que vous voulez.
La session est par utilisateur, le cache est pour l'application.
Les éléments du cache peuvent et seront supprimés automatiquement en fonction des délais d'expiration (glissants ou fixes) et des contraintes de mémoire du processus de travail IIS.
Donc, fondamentalement, les éléments du cache ne sont jamais garantis, mais la session y restera jusqu'à la fin de la session.
Le stockage d'éléments par utilisateur (via une session ou une utilisation créative du cache) peut entraîner une utilisation importante de la mémoire et doit être soigneusement pris en compte.
En plus de tout cela, si IIS réinitialise le processus de travail, vous pouvez perdre votre cache et votre session.
Voir cette réponse .
La session peut tuer les performances de votre application, sauf si vous utilisez un fournisseur d'arrière-plan comme memcached ou velocity. En règle générale, vous devez l'éviter.