Přehled kapitol
Statistika testů
K této kapitole
Zodpovězených: 0
Správně: 0
Špatně: 0
Úspěšnost: 0%
Nezodpovězených: 0

Pro testování a jeho statistické vyhodnocení je nutné se přihlásit.


Celkem
Zodpovězených: 0
Správně: 0
Špatně: 0
Úspěšnost: 0%
Nezodpovězených: 0

Absolutní a klouzavé vypršení
RNDr. Dušan Kovář, Ph.D.
3. ledna 2007
Počet návštěv: 4036

V předcházející kapitole jsme si ukázali jednotlivé verze metody Insert třídy System.Web.Caching.Cache:

// Verze 1
// Základní verze, která neumožňuje zadat
// pravidla pro vypršení platnosti položky:
public void Insert(string key, object value);
// Verze 2
// U této verze lze navíc zadat pravidlo pro vypršení v závislosti
// na souboru nebo položkách s jiným klíčem:
public void Insert(string key, object value, CacheDependency dependencies);
// Verze 3
// Zde je možné zadat absolutní vypršení - přesný okamžik, kdy dojde k vypršení,
// nebo klouzavé vypršení - za jak dlouho má dojít k vypršení:
public void Insert(string key, object value, CacheDependency dependencies,
   DateTime absoluteExpiration, TimeSpan slidingExpiration);
// Verze 4
// Zde lze navíc zadat prioritu položky - položky se pak odstraňují v závislosti
// na prioritách položek. Posledním parametrem je delegát metody, která se má
// zavolat při odstraňování položky z mezipaměti:
public void Insert(string key, object value, CacheDependency dependencies,
   DateTime absoluteExpiration, TimeSpan slidingExpiration,
   CacheItemPriority priority, CacheItemRemovedCallback onRemoveCallback);

V této kapitole se budeme zabývat verzí 3, která přidává pravidla pro absolutní a klouzavé vypršení. Nejdříve se zaměřme na absolutní vypršení platnosti. V tom případě se ve čtvrtém argumentu zadá přesný čas vypršení a v pátém hodnota Cache.NoSlidingExpiration. Změňte v příkladu z předcházející kapitoly metodu Application_Start v souboru Global.asax takto:

protected void Application_Start(Object sender, EventArgs e)
{

   // Načteme obsah XML souboru SloganyDne.xml do
   // datasetu:
   DataSet ds = new DataSet();
   string nazevSouboru = Server.MapPath("SloganyDne.xml");
   ds.ReadXml(nazevSouboru);
   
   /* Závislost na souboru:
   Context.Cache.Insert("SloganyDne", ds,
      new CacheDependency(nazevSouboru));
   */


   // Absolutní vypršení - platnost přestane
   // v čase následujícím 30 sekund po čase vložení:
   Context.Cache.Insert("SloganyDne", ds, null,
      DateTime.Now.AddSeconds(30),
      Cache.NoSlidingExpiration);
}

Pak po spuštění aplikace zkuste opakovaně aktualizovat okno prohlížeče. Prvních 30 sekund dostanete stále stejný obrázek:

Po 30 sekundách však vyprší platnost položky v mezipaměti:

Podobně lze zadat klouzavé vypršení platnosti, kdy se ve čtvrtém argumentu zadá hodnota Cache.NoAbsoluteExpiration a v pátém časový interval (instance třídy TimeSpan), za který má dojít k vypršení platnosti položky. Změňte opět metodu Application_Start v souboru Global.asax následovně:

protected void Application_Start(Object sender, EventArgs e)
{

   // Načteme obsah XML souboru SloganyDne.xml do
   // datasetu:
   DataSet ds = new DataSet();
   string nazevSouboru = Server.MapPath("SloganyDne.xml");
   ds.ReadXml(nazevSouboru);
   
   /* Závislost na souboru:
   Context.Cache.Insert("SloganyDne", ds,
      new CacheDependency(nazevSouboru));
   */


   /* Absolutní vypršení - platnost přestane
      v čase následujícím 30 sekund po čase vložení:
   Context.Cache.Insert("SloganyDne", ds, null,
      DateTime.Now.AddSeconds(30),
      Cache.NoSlidingExpiration);
   */


   // Klouzavé vypršení - platnost přestane
   // po 5 minutách:
   Context.Cache.Insert("SloganyDne", ds, null,
      Cache.NoAbsoluteExpiration,
      TimeSpan.FromMinutes(5));
}

Pokud chcete zadat prioritu položky v mezipaměti, musíte se uchýlit k poslední nejobecnější verzi metody Insert. Pokud chcete položce přiřadit největší prioritu, což znamená, že v okamžiku, kdy začne docházet paměť, se začnou uvolňovat nejdříve ostatní položky - s nižší prioritou, použijte šestý parametr s hodnotou CacheItemPriority.High a poslední na null:

protected void Application_Start(Object sender, EventArgs e)
{

   // Načteme obsah XML souboru SloganyDne.xml do
   // datasetu:
   DataSet ds = new DataSet();
   string nazevSouboru = Server.MapPath("SloganyDne.xml");
   ds.ReadXml(nazevSouboru);
   
   /* Závislost na souboru:
   Context.Cache.Insert("SloganyDne", ds,
      new CacheDependency(nazevSouboru));
   */


   /* Absolutní vypršení - platnost přestane
      v čase následujícím 30 sekund po čase vložení:
   Context.Cache.Insert("SloganyDne", ds, null,
      DateTime.Now.AddSeconds(30),
      Cache.NoSlidingExpiration);
   */


   /* Klouzavé vypršení - platnost přestane
    po 5 minutách:
   Context.Cache.Insert("SloganyDne", ds, null,
      Cache.NoAbsoluteExpiration,
      TimeSpan.FromMinutes(5));
   */


   // Navíc s vysokou prioritou:
   Context.Cache.Insert("SloganyDne", ds, null,
      Cache.NoAbsoluteExpiration,
      TimeSpan.FromMinutes(5),
      CacheItemPriority.High, null);
}

Hodnota priority CacheItemPriority.NotRemovable zajišťuje, že položka nebude odstraňována z paměti.

Sedmý parametr nejobecnější verze metody Insert slouží pro zadání metody zpětného volání. O tom však až v další kapitole.



Hodnocení kapitoly "Absolutní a klouzavé vypršení"
Oslovila vás tato kapitola?
Ohodnoťte její obsah počtem bodů od 1 (nejhorší) do 10 (nejlepší):
Zatím nikdo nehodnotil. Buďte první.
Diskuze ke kapitole "Absolutní a klouzavé vypršení"

Napadá vás zajímavá otázka související s touto kapitolou?

Přidejte do diskuze


Vyhledávání
Programovací jazyk C# | Programování Windows Forms | Architektura .NET | ASP.NET | Dodatky | Diskuze
RNDr. Dušan Kovář, Ph.D.
Gymnázium Olomouc-Hejčín