70 votes

Application vs Session vs Cache

Quel est le cas d'utilisation approprié pour tous ces éléments ? Il semble que la session et le cache soient assez similaires, et je ne vois pas vraiment d'utilisation pour l'application.

13 votes

Vous voudrez peut-être ajouter le cookie, la chaîne de requête et l'état de la vue.

0 votes

0 votes

110voto

kd7 Points 16740

L'application et l'état de session présentent une différence très importante :

L'état de l'application est un référentiel de données accessible à toutes les classes d'une application ASP.NET. L'état de l'application est stocké en mémoire sur le serveur et est plus rapide que le stockage et la récupération d'informations dans une base de données. Contrairement à l'état de session, qui est spécifique à une session d'utilisateur unique, l'état d'application s'applique à tous les utilisateurs et à toutes les sessions. . Par conséquent, l'état de l'application est un endroit utile pour stocker de petites quantités de données souvent utilisées qui ne changent pas d'un utilisateur à l'autre

Aperçu de l'état de l'application
Aperçu de l'état de la session

La mise en cache, quant à elle, permet de stocker en mémoire des objets qui nécessitent d'importantes ressources de serveur pour être créées - il offre des fonctionnalités puissantes qui vous permettent de personnaliser la manière dont les éléments sont mis en cache et la durée de leur mise en cache - vous pouvez définir des propriétés étendues telles que la priorité et l'expiration.

Aperçu des données relatives aux applications de mise en cache

Bien qu'ils puissent sembler similaires, ils sont distincts et ont des rôles différents à jouer dans une application ASP.NET au sens large.

0 votes

Qu'entendons-nous par objects in memory that require extensive server resources to create ? Si je dois stocker une paire clé-valeur de chaîne de caractères (accessible à tous les utilisateurs), je la stockerai dans l'état de l'application et si je dois stocker le contenu d'un fichier fréquemment utilisé, je le stockerai dans le cache de l'application. Cet exemple est-il juste ? Si tout est stocké dans la mémoire principale de l'application uniquement, pourquoi le stocker dans le cache serait-il utile, à part pour des fonctions telles que l'expiration. En fin de compte, l'état de l'application et le cache monopolisent la mémoire principale de l'application. N'est-ce pas ?

1 votes

@RBT Bien qu'ils utilisent tous deux de la mémoire côté serveur, le cache peut être invalidé par de multiples facteurs, tels que la priorité, le temps ou une dépendance (comme un autre élément dans le cache, un fichier ou un répertoire). Je vous conseille de lire le lien fourni dans la réponse pour l'aperçu de la mise en cache des données d'application afin d'avoir une meilleure idée des capacités.

0 votes

22voto

Adeel Points 9888

La session se fait par utilisateur. Elle n'est pas partagée entre les utilisateurs.

L'application et le champ d'application de la mémoire cache s'appliquent à l'ensemble de l'application. Le cache peut expirer. Si vous avez des données qui peuvent être modifiées, disons 5 minutes, vous pouvez les placer dans le cache, alors que si vous avez des données qui ne sont pas mises à jour régulièrement, vous pouvez les placer dans la variable d'application.

0 votes

Il semble que la session soit quelque chose que l'on utilise 95 % du temps. Je suppose que le cache pourrait être utilisé pour les composants d'une page qui utilisent des requêtes. Je vois peu d'utilité à l'état de l'application

1 votes

Cela dépend de l'application. Si la collecte et l'agrégation de votre contenu pour la consultation d'une page prennent beaucoup de temps, il est logique de le mettre en cache sur votre propre serveur, de sorte que chaque utilisateur reçoive le même contenu mis en cache. Cependant, les éléments spécifiques à un processus que traverse un utilisateur sont généralement placés dans la session. ApplicationState pourrait être utilisé pour des choses telles que la configuration ou les jetons d'accès à des services externes.

0 votes

L'objet d'application permet notamment de restreindre les sessions multiples pour un même utilisateur. Chaque fois que l'utilisateur se connecte, il entre dans l'application et la supprime à la fin de la session. Si l'application contient déjà une entrée pour l'identifiant de l'utilisateur, cela signifie qu'une session active est déjà en cours.

7voto

H20rider Points 443

La session est utilisée pour les informations spécifiques à l'utilisateur. En général, vous enregistrez le nom d'utilisateur, les préférences de l'utilisateur comme le nom d'écran, l'identifiant du panier (si vous vendez quelque chose), l'adresse électronique, etc.

Le cache est généralement utilisé lorsque vous avez des informations qui sont partagées par toutes les personnes. Il s'agit généralement de réduire les longs processus ou les accès à la base de données. Par exemple, vous souhaitez afficher les n premiers articles. Vous pouvez fixer une limite de temps, de sorte que la date soit actualisée après un certain temps.

La variable d'application est utile pour les informations statiques que vous souhaitez sauvegarder sur le serveur. Il peut s'agir de l'emplacement des fichiers multimédias.

4voto

Cogitator Points 134

Aucune de ces réponses ne rend suffisamment claire une propriété très importante du cache : il a une portée applicative et est partagé par tous les utilisateurs ! Toutes les données stockées dans le cache sont accessibles à tous les utilisateurs. Vous pouvez toujours stocker dans la mémoire cache des données que vous souhaitez rendre accessibles uniquement à un groupe d'utilisateurs. spécifique mais vous devez utiliser une valeur de clé de cache unique pour cet utilisateur, par exemple Cache.Add("UserData" + userID, data...

2voto

Ian Ippolito Points 111

Il existe une limitation très importante de l'objet session inproc intégré, qu'aucune des autres réponses n'a mentionnée, et qui limite son utilisation dans les sites web à forte concurrence. Plus précisément, si vous modifiez un élément de session dans votre code, la requête sera bloquée et attendra que toutes les requêtes de lecture de l'objet de session soient terminées. Dans ce cas, le cache est un bien meilleur choix :

Je viens de découvrir pourquoi tous les sites ASP.Net sont lents, et j'essaie de trouver une solution.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X