2009-04-02 12 views
3

Je crée une application volumineuse et j'utilise habituellement une simple session pour stocker des informations globales privées, mais comme l'application pourrait être assez grande, je crois que cela pourrait poser un problème quantité de sessions de mémoire qu'il pourrait avoir.ASP.NET Stockage des variables globales - accessible à partir de chaque page

Existe-t-il un meilleur moyen de stocker de telles variables? Par exemple, lorsque l'utilisateur se connecte, je souhaite stocker des données sur cet utilisateur et les afficher si nécessaire sans avoir à interroger la base de données à chaque fois.

Répondre

3

Les sessions sont la voie à suivre ici, elles sont destinées à conserver des informations sur la session en cours à travers les demandes. Il n'y a aucun autre objet dans le cadre ASP.NET qui a cette intention.

Vous pouvez utiliser le cache ou le stocker dans la collection Application, mais vous êtes responsable de l'identification unique des données de session individuelles.

À la fin de la session, vous devez également gérer les instances stockées dans ces collections (Cache ou Application).

C'est vraiment une mauvaise idée de commencer à poser ces questions en fonction de ce que vous pourriez "penser" va se passer. C'est une forme d'optimisation prématurée, et vous devriez l'éviter. Au lieu de cela, utilisez des sessions, comme elles étaient prévues à cet effet, puis mesurez où se trouvent vos goulots d'étranglement et corrigez-les, si les performances sont un problème lors des tests.

3

utilisation des cookies - ils travailleraient indépendamment de votre équilibre charge des environnements

autres options incluent:

1) l'écriture de vos sessionvalues ​​à une base de données SQL - vous pouvez configurer votre application asp.net pour configurer l'état de session utiliser sql server - mais cela a ses propres problèmes car les sessions ne sont jamais interrompues (donc vous devez gérer cela via le code explicitement)

2) si vous n'utilisez pas sql server - vous risquez de rencontrer un problème si vous en avez trop utilisateurs et vous implémentez l'équilibrage de charge sur votre serveur web - de sorte qu'un utilisateur peut aller sur un autre site serveur dans la même session (et il ne fonctionne pas)

il y a un travail autour de cela aussi - elle est appelée STICKY SESSIONS - où votre serveur web garantit votre utilisateur devra toujours frapper le même serveur Web dans la session

3) avec le modèle de fournisseur .net 2.0, vous pouvez même écrire votre propre fournisseur de stockage de session en implémentant leurs délégués - vous pouvez créer vos propres fichiers xml sur votre serveur web/serveur partagé pour lire/écrire des données de session :-)

Il existe donc plusieurs façons de résoudre ce problème. Cependant, la solution la plus simple et la plus rentable consiste à utiliser des cookies.

1

Vous pouvez utiliser le cache. Cela a un mécanisme intégré pour libérer lorsque la mémoire est à court ...

+0

et ne dépend pas des paramètres de cookie client – annakata

0

Si vous pensez que vos données sont trop volumineuses pour la session, je considérerais une base de données de quelque sorte en utilisant le cache afin que vous n'ayez pas besoin appels.

0

Si vous stockez des données de session par utilisateur, l'utilisation de la session ASP.NET est définitivement votre meilleur choix. Si vous êtes le plus préoccupé par l'utilisation de la mémoire, vous pouvez utiliser le mode MSSQL. Les données doivent se trouver quelque part et le choix du mode de session à utiliser dépend de votre environnement et des habitudes d'utilisation de vos utilisateurs.

0

Ne supposez pas qu'il y aura un problème avec la taille de l'état de la session tant que vous ne verrez pas un tel problème et que vous aurez tenté de le résoudre. Par exemple, il est possible que, bien que l'application dans son ensemble puisse utiliser une grande quantité d'état de session, un utilisateur donné peut ne pas en utiliser autant au cours d'une session.

Il est également possible que le passage du fournisseur d'état de session par défaut au fournisseur SQL ou au fournisseur de serveur d'état soulage un problème de mémoire.

Vous pouvez utiliser le cache, mais le cache s'applique à l'ensemble de l'application. Vous devez qualifier les entrées de cache avec l'ID utilisateur ou l'ID de session: Cache[userID + ".MyCacheEntry"]. N'utilisez en aucun cas des variables statiques pour stocker ces données. En aucun cas, n'utilisez des variables statiques. Comme suggéré par votre ligne d'objet, ils s'appliquent à l'ensemble de l'application et non à l'utilisateur.

1

Utilisez certainement des cookies pour cela. La meilleure approche consiste à créer soi-même une classe wrapper de cookies qui fera tout le travail nécessaire pour vous - vérifier si le cookie est nul, accéder au httpcontext, etc. Pas besoin de gâcher votre code avec tout ça; il suffit de résumer tout cela dans cookies.cs ou .vb.

SetCookieValue(someValue, cookieName); //there will be some expiration concerns here as well 

myValue = GetCookieValue(cookieName); 

Christian Weiss has a good strategy.

Questions connexes