web-dev-qa-db-fra.com

Prise en charge de la mise en cache .NET 4

Je comprends que le .NET 4 Framework dispose d'un support de mise en cache intégré. Quelqu'un a-t-il une expérience dans ce domaine ou pourrait-il fournir de bonnes ressources pour en savoir plus à ce sujet?

Je fais référence à la mise en cache d'objets (entités principalement) en mémoire, et probablement à l'utilisation de System.Runtime.Caching.

32
Hosea146
27
Jodrell

Je ne l'ai pas utilisé moi-même, mais si vous mettez simplement en cache des objets simples en mémoire, vous faites probablement référence à la classe MemoryCache , dans l'espace de noms System.Runtime.Caching. Il y a un petit exemple de comment l'utiliser à la fin de la page.

Edit: Pour donner l'impression que j'ai réellement travaillé sur cette réponse, voici l'exemple de cette page! :)

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

    if (fileContents == null)
    {
        CacheItemPolicy policy = new CacheItemPolicy();

        List<string> filePaths = new List<string>();
        filePaths.Add("c:\\cache\\example.txt");

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

        // Fetch the file contents.
        fileContents = 
            File.ReadAllText("c:\\cache\\example.txt");

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

    Label1.Text = fileContents;
}

C'est intéressant car cela montre que vous pouvez appliquer des dépendances au cache, un peu comme dans le cache ASP.NET classique. La grande différence ici est que vous n'avez pas de dépendance sur l'assembly System.Web.

15
Mike Goatly

MemoryCache dans le cadre est un bon point de départ, mais vous aimerez peut-être aussi considérer LazyCache car il a une API plus simple que le cache mémoire et a un verrouillage intégré ainsi que d'autres fonctionnalités Nice. Il est disponible sur nuget: PM> Install-Package LazyCache

// Create our cache service using the defaults (Dependency injection ready).
// Uses MemoryCache.Default as default so cache is shared between instances
IAppCache cache = new CachingService();

// Declare (but don't execute) a func/delegate whose result we want to cache
Func<ComplexObjects> complexObjectFactory = () => methodThatTakesTimeOrResources();

// Get our ComplexObjects from the cache, or build them in the factory func 
// and cache the results for next time under the given key
ComplexObject cachedResults = cache.GetOrAdd("uniqueKey", complexObjectFactory);

J'ai récemment écrit cet article sur pour commencer la mise en cache dans dot net que vous pourriez trouver utile.

(Avertissement: je suis l'auteur de LazyCache)

5
alastairtree

J'espère que vous faites référence à System.Runtime.Caching de .Netframework 4.0

Le lien ci-dessous est le bon point de départ: ici

2
Kishore Borra

L'article MSDN "ASP.NET Caching: Techniques and Best Practices" est un bon début.

0
AD.Net