2011-05-12 24 views
32

Entiendo que .NET 4 Framework tiene incorporado el soporte de caché. ¿Alguien tiene alguna experiencia con esto, o podría proporcionar buenos recursos para aprender más sobre esto?.NET 4 Caching Support

Me refiero a la memoria caché de objetos (entidades principalmente), y probablemente el uso de System.Runtime.Caching.

+10

almacenamiento en caché de qué? ¿Te refieres a Entity Framework, WCF o un servidor de aplicaciones? – weismat

+0

'System.Runtime.Caching' obviamente ;-) – Jodrell

+0

Debe tener en cuenta el siguiente error si aún no se ha actualizado a .NET 4.5: http://stackoverflow.com/a/15715990/13087 – Joe

Respuesta

2

Espero que usted se refiere a System.Runtime.Caching de .NETFramework 4.0

continuación enlace es el buen punto de partida: Here

15

yo no he hecho uso del mismo, pero si usted' simplemente almacenando en memoria caché objetos simples, probablemente se esté refiriendo a la clase MemoryCache, en el espacio de nombres System.Runtime.Caching. Hay un pequeño ejemplo de cómo usarlo al final de la página.

Editar: Para que parezca que realmente he hecho algo de trabajo para esta respuesta, ¡esta es la muestra de esa página! :)

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; 
} 

Es interesante porque muestra que se puede aplicar a las dependencias de la memoria caché, al igual que en la memoria caché de ASP.NET clásico. La gran diferencia aquí es que no tiene una dependencia en el ensamblado System.Web.

+1

Lo he usado y encontré la documentación que faltaba. Tengo entendido que puede usarlo básicamente de la misma manera que lo haría con System.Web caching. – goalie7960

4

MemoryCache en el marco es un buen lugar para comenzar, pero también podría considerar LazyCache porque tiene una API más simple que la caché de memoria y tiene un bloqueo incorporado, así como algunas otras características agradables. Está disponible en 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); 

Hace poco escribí este artículo sobre getting started with caching in dot net que pueden serle de utilidad.

(exención de responsabilidad: yo soy el autor de LazyCache)