Практическое руководство. Добавление элементов в объект Cache

Visual Studio 2010

Обновлен: Ноябрь 2007

Доступ к элементам, которые содержатся в кэше приложения, можно получить с помощью объекта Cache. Новые элементы добавляются в кэш приложения с помощью метода Insert объекта Cache. Перегрузки метода позволяют добавлять элементы с различными параметрами зависимостей, окончания срока действия и уведомлений об удалении. Если с помощью метода Insert добавить в кэш элемент, имя которого совпадает с именем элемента, который уже там содержится, то старый элемент кэша заменяется новым.

Элементы в кэш можно также добавлять с помощью метода Add. Этот метод позволяет задавать все те же параметры, что и метод Insert, однако метод Add возвращает объект, добавленный в кэш. Кроме того, если с помощью метода Add добавляется элемент, имя которого совпадает с именем элемента, который уже содержится в кэше, то старый элемент не заменяется новым, и исключение не создается.

В описанных в этом разделе процедурах иллюстрируются перечисленные ниже способы добавления элементов в кэш прикладной программы.

  • Непосредственное добавление элемента в кэш путем настройки ключа и значения.

  • Добавление элементов в кэш с помощью метода Insert.

  • Добавление элемента в кэш вместе с зависимостью, согласно которой элемент удаляется из кэша при изменении зависимости. Зависимости можно устанавливать на основе других элементов, на основе файлов, а также на основе нескольких объектов.

  • Добавление в кэш элемента с политикой истечения сроков действия. Кроме возможности задавать зависимости для элемента, можно установить, чтобы его срок действия истек через определенный промежуток времени (скользящий срок действия) или в определенный момент (предельный срок действия). Задавать можно либо один, либо другой параметр, но не оба одновременно.

  • Добавление элемента в кэш и определение относительного приоритета кэшированного элемента. Относительный приоритет помогает определить, какие элементы следует удалять на платформе .NET Framework; в первую очередь из кэша удаляются элементы с более низким приоритетом, а после них — элементы с более высоким приоритетом.

  • Добавление элемента путем вызова метода Add.

Кроме показанных здесь зависимостей, можно создать зависимость в таблице SQL Server или зависимость на основе настраиваемой зависимости. Дополнительные сведения см. в разделах Общие сведения о кэшировании в ASP.NET и Кэширование в ASP.NET с помощью класса SqlCacheDependency.

Можно также сделать так, чтобы при удалении элемента из кэша с помощью делегата CacheItemRemovedCallback выдавалось уведомление. Полный пример см. в разделе Практическое руководство. Уведомление приложения об удалении элемента из кэша..

Непосредственное добавление элемента в кэш путем настройки ключа и значения

  • Элемент добавляется в кэш так же, как добавляется запись в словарь, — путем указания его ключа и значения.

    В примере кода ниже к объекту Cache добавляется элемент с именем CacheItem1.

    Cache["CacheItem1"] = "Cached Item 1";
    

    Cache("CacheItem1") = "Cached Item 1"
    

Добавление элементов в кэш с помощью метода Insert

  • Вызовите метод Insert, передающий ключ и значение элемента, который нужно добавить.

    В приведенном ниже примере кода добавляется строка с именем CacheItem2:

    Cache.Insert("CacheItem2", "Cached Item 2");
    

    Cache.Insert("CacheItem2", "Cached Item 2")
    

Для того чтобы добавить элемент в кэш путем указания зависимости, выполните описанные ниже действия

  • Вызовите метод Insert, который передает экземпляр объекта CacheDependency.

    В приведенном ниже примере кода добавляется элемент с именем CacheItem3, зависимый от другого элемента кэша с именем CacheItem2:

    string[] dependencies = { "CacheItem2" };
    Cache.Insert("CacheItem3", "Cached Item 3",
        new System.Web.Caching.CacheDependency(null, dependencies));
    

    Dim dependencies As String() = {"CacheItem2"}
    Cache.Insert("CacheItem3", "Cached Item 3", _
        New System.Web.Caching.CacheDependency( _
        Nothing, dependencies))
    

    В приведенном ниже примере кода элемент с именем CacheItem4 добавляется в кэш, и для него устанавливается зависимость от файла с именем XMLFile.xml:

    Cache.Insert("CacheItem4", "Cached Item 4",
        new System.Web.Caching.CacheDependency(
        Server.MapPath("XMLFile.xml")));
    

    Cache.Insert("CacheItem4", "Cached Item 4", _
        New System.Web.Caching.CacheDependency( _
        Server.MapPath("XMLFile.xml")))
    

    В приведенном ниже примере кода показано, как создать несколько зависимостей. В примере добавляется зависимость ключа от другого элемента кэша с именем CacheItem1 и зависимость от файла с именем XMLFile.xml.

    System.Web.Caching.CacheDependency dep1 = 
        new System.Web.Caching.CacheDependency(Server.MapPath("XMLFile.xml"));
    string[] keyDependencies2 = { "CacheItem1" };
    System.Web.Caching.CacheDependency dep2 = 
        new System.Web.Caching.CacheDependency(null, keyDependencies2);
    System.Web.Caching.AggregateCacheDependency aggDep = 
        new System.Web.Caching.AggregateCacheDependency();
    aggDep.Add(dep1);
    aggDep.Add(dep2);
    Cache.Insert("CacheItem5", "Cached Item 5", aggDep);
    

    Dim dep1 As CacheDependency = _
        New CacheDependency(Server.MapPath("XMLFile.xml"))
    Dim keyDependencies2 As String() = {"CacheItem1"}
    Dim dep2 As CacheDependency = _
        New System.Web.Caching.CacheDependency(Nothing, _
        keyDependencies2)
    Dim aggDep As AggregateCacheDependency = _
        New System.Web.Caching.AggregateCacheDependency()
    aggDep.Add(dep1)
    aggDep.Add(dep2)
    Cache.Insert("CacheItem5", "Cached Item 5", aggDep)
    

Добавление в кэш элемента с политикой истечения сроков действия

  • Вызовите метод Insert, который передает абсолютный или скользящий срок действия.

    В приведенном ниже примере кода в кэш добавляется элемент с абсолютным сроком действия, истекающим через одну минуту:

    Cache.Insert("CacheItem6", "Cached Item 6",
        null, DateTime.Now.AddMinutes(1d), 
        System.Web.Caching.Cache.NoSlidingExpiration);
    

    Cache.Insert("CacheItem6", "Cached Item 6", _
        Nothing, DateTime.Now.AddMinutes(1.0), _
        TimeSpan.Zero)
    

    В приведенном ниже примере кода в кэш добавляется элемент со скользящим сроком действия, истекающим через 10 минут:

    Cache.Insert("CacheItem7", "Cached Item 7",
        null, System.Web.Caching.Cache.NoAbsoluteExpiration,
        new TimeSpan(0, 10, 0));
    

    Cache.Insert("CacheItem7", "Cached Item 7", _
        Nothing, System.Web.Caching.Cache.NoAbsoluteExpiration, _
        New TimeSpan(0, 10, 0))
    

Добавление в объект Cache элемента с параметрами приоритета

  • Вызовите метод Insert, указав значение из перечисления CacheItemPriority.

    В следующем примере кода в кэш добавляется элемент со значением приоритета High:

    Cache.Insert("CacheItem8", "Cached Item 8",
        null, System.Web.Caching.Cache.NoAbsoluteExpiration,
        System.Web.Caching.Cache.NoSlidingExpiration,
        System.Web.Caching.CacheItemPriority.High, null);
    

    Cache.Insert("CacheItem8", "Cached Item 8", _
        Nothing, System.Web.Caching.Cache.NoAbsoluteExpiration, _
        System.Web.Caching.Cache.NoSlidingExpiration, _
        System.Web.Caching.CacheItemPriority.High, _
        Nothing)  
    

Добавление элемента в кэш с помощью метода Add

  • Вызовите метод Add, который возвращает объект, представляющий элемент.

    В приведенном ниже примере в кэш добавляется элемент с именем CacheItem9 , и переменной CachedItem9 присваивается значение этого элемента.

    string CachedItem9 = (string)Cache.Add("CacheItem9",
        "Cached Item 9", null,
        System.Web.Caching.Cache.NoAbsoluteExpiration,
        System.Web.Caching.Cache.NoSlidingExpiration, 
        System.Web.Caching.CacheItemPriority.Default,
        null);
    

    Dim CachedItem9 As String = CStr(Cache.Add("CacheItem9", _
        "Cached Item 9", Nothing, _
        System.Web.Caching.Cache.NoAbsoluteExpiration, _
        System.Web.Caching.Cache.NoSlidingExpiration, _
        System.Web.Caching.CacheItemPriority.Default, _
        Nothing))
    
Показ: