понедельник, 30 августа 2010 г.

.NET 4.0. Кешируем данные в памяти.

Ждете что я начну писать про System.Web.Cache? Вы одновременно правы и не правы.

ASP.NET программисты уже давно пользуются очень удобным средством для кэширования данных, из пространства имен System.Web.Cache. Он самостоятельно управляет жизнью объектов в себе, самостоятельно удаляет элементы из кеша по наступлению событий каких бы то ни было зависимостей, например изменении файла, или таблицы базы данных. Тем, кому стало интересно, отправляю к статье на MSDN.

Осталось только сказать об одном его достаточно большом недостатке – этот кеш нельзя использовать вне ASP.NET, потому что все свои данные он хранит в текущем контексте HttpContext.Current. Если у вас не ASP.NET приложение – этот объект будет недоступен.

Однако, сегодня .NET 4 меня удивил – я наткнулся на другой класс, который предназначен решить эту проблему – System.Runtime.Caching.MemoryCache.

Кроме того, что этот кеш больше не зависит от сборки System.Web, можно создавать несколько экземпляров данного класса. Есть и недостатки – не поддерживаются регионы. Хотя они и есть в базовом классе, однако сам кеш в памяти возвращает null для всех вызовов перегруженных методов с указанием параметра regionName.

В MSDN приведен такой пример использования MemoryCache:

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

Судя по этому куску кода, MemoryCache, как и Web.Cache поддерживает различные события на обновления. Например в этом куске кода создается событие на изменение файла. Из коробки доступны мониторы на изменение данных в самом кеше, изменение в файловой системе, изменений на SQL Server.

Очень интересен для рассмотрения также бызовый объект ObjectCache. Он предоставляет базовую логику кеша и представляет возможности для дальнейшего расширения поставщиков кеша. Это означает, что можно писать свой собственный кеш на стандартных интерфейсах и использовать его как стандартный кеш.

Posted via email from Комуникликабельность

Комментариев нет: