Share via


Procédure pas à pas : mise en cache de données d'application dans ASP.NET

La mise en cache vous permet de stocker des données en mémoire pour y accéder rapidement. Les applications peuvent accéder au cache et n'ont pas besoin d'extraire les données de la source d'origine lors de chaque accès aux données. Cela évite la répétition de requêtes pour les données et peut améliorer le niveau de performance et l'évolutivité. En outre, la mise en cache rend les données disponibles lorsque la source de données est temporairement indisponible.

.NET Framework fournit des classes qui vous permettent d'utiliser des fonctionnalités de mise en cache dans les applications ASP.NET. Ces classes sont définies dans l'espace de noms System.Runtime.Caching.

Notes

L'espace de noms System.Runtime.Caching est une nouveauté de .NET Framework 4.Cet espace de noms rend la mise en cache disponible pour toutes les applications .NET Framework.

Cette procédure pas à pas vous indique comment utiliser les fonctionnalités de mise en cache qui sont disponibles dans .NET Framework dans le cadre d'une application ASP.NET. Dans la procédure pas à pas, vous mettez en cache le contenu d'un fichier texte.

Cette procédure pas à pas décrit les tâches suivantes :

  • Création d'un site Web ASP.NET

  • Ajout d'une référence à .NET Framework 4.

  • Ajout d'une entrée de cache qui met en cache le contenu d'un fichier.

  • Fourniture d'une stratégie d'éviction pour l'entrée de cache.

  • Analyse du chemin d'accès du fichier mis en cache et notification auprès du cache des modifications apportées aux éléments surveillés.

Composants requis

Pour exécuter cette procédure pas à pas, les éléments suivants sont nécessaires :

  • Microsoft Visual Studio 2010.

  • Fichier texte contenant une petite quantité de texte. Le contenu de ce fichier texte sera affiché dans une page Web.

Création d'un site Web ASP.NET

Vous commencerez par créer un site Web ASP.NET.

Avertissement

Cette procédure pas à pas utilise un projet de site Web.Vous pouvez utiliser un projet d'application Web à la place.Pour plus d'informations sur ce qui différencie ces types de projets Web, consultez Projets d'application Web et projets de site Web.

Pour créer un site Web ASP.NET

  1. Démarrez Visual Studio 2010.

  2. Dans le menu Fichier, cliquez sur Nouveau site Web. Si cette option n'apparaît pas, cliquez sur Nouveau, puis sur Site Web.

    La boîte de dialogue Nouveau site Web s'affiche.

  3. Sous Modèles installés, cliquez sur Visual Basic ou C#, puis sélectionnez Site Web ASP.NET.

  4. Dans la zone Emplacement Web, sélectionnez Système de fichiers et entrez le nom du dossier dans lequel vous souhaitez conserver les pages du site Web. Par exemple, entrez le nom du dossier C:\Websites\CacheApp, puis cliquez sur OK.

    Visual Studio crée un projet Web qui inclut les fonctionnalités prégénérées pour la disposition (page maître, pages de contenu About.aspx et Default.aspx et feuille de style en cascade) pour Ajax (fichiers de script client) et pour l'authentification (appartenance d'ASP.NET). Lorsqu'une page est créée, par défaut, Visual Web Developer affiche la page en mode Source, ce qui vous permet de voir les éléments HTML de la page.

L'étape suivante consiste à ajouter le fichier texte que vous souhaitez utiliser au projet de site Web actuel.

Pour ajouter le fichier texte au projet

  1. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le nom du projet, puis cliquez sur Ajouter un élément existant.

  2. Dans la boîte de dialogue Ajouter un élément existant, sélectionnez le fichier texte à utiliser dans le cadre de cette procédure pas à pas, puis cliquez sur Ajouter.

Ajout d'une référence à l'assembly de cache

Pour utiliser l'espace de noms System.Runtime.Caching dans une application ASP.NET, vous devez ajouter une référence à l'espace de noms.

Pour ajouter une référence au site Web

  1. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le nom du site Web, puis cliquez sur Ajouter une référence.

  2. Sélectionnez l'onglet .NET, sélectionnez System.Runtime.Caching, puis cliquez sur OK.

Ajout de contrôles à la page ASP.NET

L'étape suivante consiste à ajouter un bouton et un contrôle Label à la page. Vous allez créer un gestionnaire d'événements pour l'événement Click du bouton. Vous ajouterez ensuite du code de façon à ce que le texte mis en cache s'affiche dans le contrôle Label lorsque vous cliquez sur le bouton.

Pour ajouter des contrôles à la page

  1. Ouvrez ou basculez vers la page Default.aspx.

  2. À partir de l'onglet Standard de la boîte à outils, faites glisser un contrôle Button sur la page Default.aspx.

  3. Dans la fenêtre Propriétés, définissez la propriété Text du contrôle Button sur Extraire du cache. Acceptez la propriété ID par défaut.

  4. À partir de l'onglet Standard de la boîte à outils, faites glisser un contrôle Label sur la page. Acceptez la propriété ID par défaut.

Création du cache et Mise en cache d'une entrée

Vous allez ensuite ajouter le code pour effectuer les tâches suivantes :

  • Créer une instance de la classe Cache, c'est-à-dire instancier l'objet de cache.

  • Spécifier que le cache utilise un objet HostFileChangeMonitor pour surveiller les modifications apportées dans le fichier texte.

  • Lire le fichier texte et mettre en cache son contenu en tant qu'entrée de cache.

  • Afficher le contenu du fichier texte mis en cache.

Pour créer l'objet de cache

  1. Double-cliquez sur le bouton pour créer un gestionnaire d'événements dans le fichier Default.aspx.cs ou Default.aspx.vb.

  2. En haut du fichier (avant la déclaration de classe), ajoutez les instructions Imports (Visual Basic) ou using (C#) suivantes.

    [Visual Basic]

    Imports System.Runtime.Caching
    Imports System.IO
    

    [C#]

    using System.Runtime.Caching;
    using System.IO;
    
  3. Dans le gestionnaire d'événements, ajoutez le code suivant pour instancier le cache :

    [Visual Basic]

    Dim cache As ObjectCache = MemoryCache.Default
    

    [C#]

    ObjectCache cache = MemoryCache.Default;
    

    ObjectCache est une classe de base qui fournit des méthodes pour implémenter un objet de cache en mémoire.

    Notes

    Dans ASP.NET 4, la mise en cache est implémentée à l'aide de la classe ObjectCache.

  4. Ajoutez le code suivant pour lire le contenu d'une entrée de cache nommée filecontents

    [Visual Basic]

    Dim fileContents As String = TryCast(cache("filecontents"), String)
    

    [C#]

    string fileContents = cache["filecontents"] as string;
    
  5. Ajoutez le code suivant pour vérifier si l'entrée de cache nommée filecontents existe

    [Visual Basic]

    If fileContents Is Nothing Then
    
    End If
    

    [C#]

    if (fileContents == null)
    {
    
    }
    

    Si l'entrée de cache spécifiée n'existe pas, vous devez lire le fichier texte et l'ajouter au cache en tant qu'entrée de cache.

  6. Dans le bloc if/then, ajoutez le code suivant pour créer un objet CacheItemPolicy qui spécifie que le cache expire après 10 secondes.

    [Visual Basic]

    Dim policy As New CacheItemPolicy()
    policy.AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(10.0)
    

    [C#]

    CacheItemPolicy policy = new CacheItemPolicy();
    policy.AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(10.0);
    

    Si aucune information relative à l'éviction ou à l'expiration n'est fournie, la valeur par défaut est InfiniteAbsoluteExpiration, ce qui signifie que les éléments du cache n'expirent pas en fonction d'une heure absolue. Au lieu de cela, les éléments expirent uniquement en cas de sollicitation de la mémoire. Il est recommandé de fournir explicitement une heure d'expiration absolue ou décalée. Dans cette procédure pas à pas, vous utilisez une expiration absolue de 10 secondes.

  7. À l'intérieur du bloc if/then et à la suite du code que vous avez ajouté au cours de l'étape précédente, ajoutez le code suivant pour créer une collection pour les chemins d'accès aux fichiers que vous souhaitez surveiller et pour ajouter le chemin d'accès du fichier texte à la collection.

    [Visual Basic]

    Dim filePaths As New List(Of String)()
    Dim cachedFilePath As String = Server.MapPath("~") & _
            "\cacheText.txt"
    filePaths.Add(cachedFilePath)
    

    [C#]

    List<string> filePaths = new List<string>();
    string cachedFilePath = Server.MapPath("~") + "\\cacheText.txt";
    filePaths.Add(cachedFilePath);
    

    La méthode HttpServerUtilityMapPath() retourne le chemin d'accès à la racine du site Web actuel.

  8. À la suite du code que vous avez ajouté au cours de l'étape précédente, ajoutez le code suivant pour ajouter un objet HostFileChangeMonitor à la collection d'analyseurs de modification pour l'entrée de cache.

    [Visual Basic]

    policy.ChangeMonitors.Add(New HostFileChangeMonitor(filePaths))
    

    [C#]

    policy.ChangeMonitors.Add(new HostFileChangeMonitor(filePaths));
    

L'objet HostFileChangeMonitor surveille le chemin d'accès du fichier texte et notifie le cache en cas de modification. Dans cet exemple, l'entrée de cache expire automatiquement si le contenu du fichier change.

  1. À la suite du code que vous avez ajouté au cours de l'étape précédente, ajoutez le code suivant pour lire le contenu du fichier texte.

    fileContents = File.ReadAllText(cachedFilePath) & vbCrLf & DateTime.Now.ToString()
    
    fileContents = File.ReadAllText(cachedFilePath) + "\n" + DateTime.Now; 
    

    L'horodatage de la date et de l'heure est ajouté pour vous aider à déterminer l'expiration de l'entrée de cache.

  2. À la suite du code que vous avez ajouté au cours de l'étape précédente, ajoutez le code suivant pour insérer le contenu du fichier dans l'objet de cache sous forme d'instance CacheItem.

    [Visual Basic]

    cache.Set("filecontents", fileContents, policy)
    

    [C#]

    cache.Set("filecontents", fileContents, policy);
    

    Vous spécifiez les informations relatives à l'expulsion de l'entrée de cache en passant l'objet CacheItemPolicy en tant que paramètre de la méthode Set.

  3. Après le bloc if/then, ajoutez le code suivant pour afficher le contenu du fichier mis en cache dans un contrôle Label.

    [Visual Basic]

    Label1.Text = fileContents
    

    [C#]

    Label1.Text = fileContents;
    

Test de la mise en cache dans le Site Web ASP.NET

Vous pouvez maintenant tester l'application.

Pour tester la mise en cache dans le site Web ASP.NET

  1. Appuyez sur CTRL+F5 pour exécuter l'application.

  2. Cliquez sur Extraire du cache.

    Le contenu mis en cache dans le fichier texte s'affiche dans l'étiquette. Remarquez l'horodatage à la fin du fichier.

  3. Cliquez à nouveau sur Extraire du cache.

    L'horodatage reste inchangé. Cela indique le contenu mis en cache est affiché.

  4. Attendez au moins 10 secondes, puis cliquez à nouveau sur Extraire du cache.

    Cette fois-ci, un nouvel horodatage s'affiche. Cela indique que la stratégie a permis au cache d'expirer après un délai de 10 secondes et que le nouveau contenu mis en cache s'affiche.

  5. Dans un éditeur de texte, ouvrez le fichier texte que vous avez ajouté au projet de site Web. N'apportez pas encore de modifications.

  6. Cliquez à nouveau sur Extraire du cache.

    Remarquer à nouveau l'horodatage.

  7. Apportez une modification au fichier texte, puis enregistrez le fichier.

  8. Cliquez à nouveau sur Extraire du cache.

    Cette fois-ci, l'horodatage change immédiatement. Cela indique que l'analyseur de modification de fichier d'hôte a procédé immédiatement à l'éviction de l'élément de cache lorsque vous avez apporté une modification.

    Notes

    Vous pouvez augmenter le temps d'éviction à 20 secondes ou plus pour disposer de plus de temps pour modifier le fichier.

Exemple de code

Une fois cette procédure pas à pas terminée, le code du site Web que vous avez créé se présentera comme dans l'exemple suivant.

Imports System.Runtime.Caching
Imports System.IO

Partial Class _Default
    Inherits System.Web.UI.Page

    Protected Sub Button1_Click(ByVal sender As Object, _
            ByVal e As System.EventArgs) Handles Button1.Click
        Dim cache As ObjectCache = MemoryCache.Default
        Dim fileContents As String = TryCast(cache("filecontents"), _
            String)
        If fileContents Is Nothing Then
            Dim policy As New CacheItemPolicy()
            policy.AbsoluteExpiration = _
                DateTimeOffset.Now.AddSeconds(10.0)
            Dim filePaths As New List(Of String)()
            Dim cachedFilePath As String = Server.MapPath("~") & _
                "\cacheText.txt"
            filePaths.Add(cachedFilePath)
            policy.ChangeMonitors.Add(New  _
                HostFileChangeMonitor(filePaths))

            ' Fetch the file contents.
            fileContents = File.ReadAllText(cachedFilePath) & _
                vbCrLf & DateTime.Now.ToString()
            cache.Set("filecontents", fileContents, policy)
        End If
        Label1.Text = fileContents
    End Sub

End Class
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Runtime.Caching;
using System.IO;

public partial class _Default : System.Web.UI.Page
{


    protected void Button1_Click1(object sender, EventArgs e)
    {
        ObjectCache cache = MemoryCache.Default;
        string fileContents = cache["filecontents"] as string;

        if (fileContents == null)
        {
            CacheItemPolicy policy = new CacheItemPolicy();
            policy.AbsoluteExpiration =
                DateTimeOffset.Now.AddSeconds(10.0);

            List<string> filePaths = new List<string>();
            string cachedFilePath = Server.MapPath("~") +
                "\\cacheText.txt";

            filePaths.Add(cachedFilePath);

            policy.ChangeMonitors.Add(new
                HostFileChangeMonitor(filePaths));

            // Fetch the file contents.
            fileContents = File.ReadAllText(cachedFilePath) + "\n"
                + DateTime.Now.ToString();

            cache.Set("filecontents", fileContents, policy);

        }

        Label1.Text = fileContents;
    }
}

Étapes suivantes

Dans ASP.NET, vous pouvez utiliser plusieurs implémentations de cache pour mettre en cache des données. Pour plus d'informations, consultez Caching Application Data by Using Multiple Cache Objects in an ASP.NET Application.

Voir aussi

Référence

MemoryCache

ObjectCache

Concepts

Mise en cache dans les applications .NET Framework