Share via


Vue d'ensemble de l'état de l'application ASP.NET

Mise à jour : novembre 2007

L'état de l'application est un référentiel de données disponible pour toutes les classes d'une application ASP.NET. Il est stocké en mémoire sur le serveur et se montre plus rapide que l'opération consistant à stocker et à récupérer des informations dans une base de données. Contrairement à l'état de session, spécifique à une session mono-utilisateur, l'état de l'application s'applique à tous les utilisateurs et à toutes les sessions. C'est donc un emplacement utile pour stocker de petites quantités de données souvent utilisées et qui restent identiques d'un utilisateur à un autre. Pour plus d'informations sur l'enregistrement de données en fonction des utilisateurs, consultez Vue d'ensemble de l'état de session ASP.NET et Vue d'ensemble des propriétés du profil ASP.NET.

Utilisation de l'état de l'application

L'état de l'application est stocké dans une instance de la classe HttpApplicationState. Cette classe expose un dictionnaire clé-valeur d'objets.

L'instance HttpApplicationState est créée la première fois qu'un utilisateur accède à une ressource URL dans une application. On accède en général plus souvent à la classe HttpApplicationState via la propriété Application de la classe HttpContext.

Vous pouvez utiliser l'état de l'application de deux manières : Vous pouvez ajouter, consulter ou supprimer directement des valeurs de la collection Contents par l'intermédiaire du code. La classe HttpApplicationState est accessible à tout moment durant la vie d'une application. Il est néanmoins souvent utile de charger les données de l'état de l'application au démarrage de l'application. Pour cela, vous pouvez placer le code servant à charger l'état de l'application dans la méthode Application_Start, au sein du fichier Global.asax. Pour plus d'informations, consultez Vue d'ensemble du cycle de vie des applications ASP.NET pour IIS 5.0 et 6.0.

Vous pouvez aussi ajouter des objets à la collection StaticObjects via une déclaration <object > dans le fichier Global.asax de votre application Web. L'état de l'application ainsi défini devient accessible via le code depuis n'importe quel endroit dans votre application. L'exemple suivant montre une déclaration d'objet pour une valeur d'état de l'application :

<object  scope="application" ID="MyInfo" 
    PROGID="MSWC.MYINFO">
</object>

Vous ne pouvez ajouter d'objets à la collection StaticObjects que dans le fichier Global.asax. La collection lève une NotSupportedException si vous tentez d'ajouter des objets directement par l'intermédiaire du code.

Vous pouvez accéder à des membres d'objets stockés dans l'état de l'application sans avoir à référencer la collection Application. L'exemple de code suivant montre comment référencer un membre d'un objet défini dans la collection StaticObjects de l'état de l'application :

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
    Label1.Text = MyInfo.Title
End Sub
protected void Page_Load(Object sender, EventArgs e)
    Label1.Text = MyInfo.Title;
End Sub

Considérations sur l'état de l'application

Lorsque vous utilisez l'état de l'application, vous devez garder à l'esprit les importantes considérations suivantes :

  • Ressources   Parce qu'il est stocké en mémoire, l'état de l'application est très rapide comparé à l'enregistrement de données sur disque ou dans une base de données. Toutefois, stocker de grands blocs de données dans l'état de l'application peut remplir la mémoire serveur et obliger le serveur à paginer la mémoire vers le disque. Plutôt que d'utiliser l'état de l'application, vous pouvez utiliser le mécanisme de cache d'ASP.NET pour stocker de larges volumes de données d'application. Le cache ASP.NET stocke également des données en mémoire et se montre par conséquent très rapide. La différence est qu'ASP.NET gère activement le cache et en supprime des éléments lorsque la mémoire se raréfie. Pour plus d'informations, consultez Vue d'ensemble de la mise en cache ASP.NET.

  • Volatilité   L'état de l'application étant stocké dans la mémoire serveur, il est perdu chaque fois que l'application est arrêtée ou redémarrée. Par exemple, si le fichier Web.config est modifié, l'application est redémarrée et tout l'état de l'application est perdu, à moins que ses valeurs n'aient été écrites sur un support de stockage non volatile, tel qu'une base de données.

  • Évolutivité   L'état de l'application n'est pas partagé entre plusieurs serveurs servant la même application, comme dans une batterie de serveurs Web, ou entre plusieurs processus de travail servant la même application sur le même serveur, comme dans un jardin Web. Votre application ne peut donc pas s'appuyer sur un état de l'application qui contiendrait les mêmes données pour des serveurs ou des processus différents. Si elle s'exécute dans des environnements multiprocesseurs ou multiserveurs, envisagez d'utiliser une option plus évolutive, telle qu'une base de données, pour les données qui doivent rester fidèles dans toute l'application.

  • Accès concurrentiel   L'état de l'application est libre de threads, ce qui signifie que ses données sont accessibles simultanément par un grand nombre de threads. Il est donc important de vérifier que lorsque vous mettez à jour les données d'état de l'application, vous le faites de manière thread-safe en incluant une prise en charge intégrée de la synchronisation. Vous pouvez utiliser les méthodes Lock et UnLock pour garantir l'intégrité des données en les verrouillant pour qu'elles ne puissent être écrites que par une seule source à la fois. Vous pouvez également réduire les risques d'accès concurrentiel en initialisant les valeurs de l'état de l'application dans la méthode Application_Start du fichier Global.asax. Pour plus d'informations, consultez Vue d'ensemble du cycle de vie des applications ASP.NET pour IIS 5.0 et 6.0.

Voir aussi

Tâches

Comment : enregistrer des valeurs dans l'état de l'application

Comment : lire les valeurs de l'état de l'application

Concepts

Vue d'ensemble de la gestion d'état ASP.NET

Autres ressources

Nouveautés de la gestion d'état ASP.NET