Читать «ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание» онлайн - страница 665
Эндрю Троелсен
‹%@ Application Language="C#" %›
‹%@ Import Namespace = "System.Data.SqlClient" %›
‹%@ Import Namespace = "System.Data" %›
‹script runat="server"›
// Определение статического члена-переменной типа Cache.
static Cache theCache;
void Application_Start(Object sender, EventArgs e) {
// Присваивание значения статической переменной 'theCache' .
theCache = Context.Cache;
// При запуске приложения читается текущая запись
// таблицы Inventory базы данных Cars.
SqlConnection cn = new SqlConnection("data source=localhost;initial catalog=Cars; user id='sa';pwd=''");
SqlDataAdapter dAdapt = new SqlDataAdapter("Select
DataSet theCars = new dataSet(); dAdapt.Fill(theCars, "Inventory");
// Сохранение DataSet в кэше.
theCache.Insert("AppDataSet", theCars, null,
DateTime.Now.AddSeconds(15), Cache.NoSlidingExpiration, CacheItemPrioritу.Default,
new CacheItemRemovedCallback(UpdateCarInventory));
}
// Цель делегата CacheItemRemovedCallback.
static void UpdateCarInventorу(string key, object item, CacheItemRemovedReason reason) {
// Заполнение DataSet.
SqlConnection cn
SqlDataAdapter dAdapt = new SqlDataAdapter("Select * From Inventory", cn);
DataSet theCars = new DataSet();
dAdapt.Fill(theCars, "Inventory");
// Сохранение в кэше.
theCache.Insert("AppDataSet", theCars, null,
DateTime.Now.AddSeconds(15), Cache.NoSlidingExpiration, CacheItemPriority.Default,
new CasheItemRemovedCallback(UpdateCarInventory));
}
…
‹/script›
Сначала обратите внимание на то, что тип Global определяет статическую переменную типа Cache. Причина в том, что определяется также статическая функция (UpdateCarInventory()), которой требуется доступ к Cache (напомним, что статические члены не имеют доступа к наследуемым членам, поэтому в данном случае вы не сможете использовать свойство Context).
Внутри обработчика событий Application_Start() заполняется тип DataSet, который затем помещается в кэш приложения. Должно быть ясно, что метод Context.Cache.Insert() перегружен. Ниже объясняются значения каждого из параметров этого метода.
// Сохранение в кэше.
theCache.Insert("AppDataSet", // Имя для идентификации элемента.
theCars, // Объект для отправки в кэш.
null, // Зависимости для объекта.
DateTime.Now.AddSeconds(15), // Длительность пребывания в кэше.
Cache.NoSlidingExpiration, // Фиксированное или скользящее время.
CacheItemPriority.Default, // Приоритет элемента.