Ukládání do mezipaměti
od Microsoftu
Znalost ukládání do mezipaměti je důležitá pro dobře fungující ASP.NET aplikaci. ASP.NET 1.x nabízí tři různé možnosti ukládání do mezipaměti; ukládání výstupu do mezipaměti, ukládání fragmentů do mezipaměti a rozhraní API mezipaměti.
Znalost ukládání do mezipaměti je důležitá pro dobře fungující ASP.NET aplikaci. ASP.NET 1.x nabízí tři různé možnosti ukládání do mezipaměti; ukládání výstupu do mezipaměti, ukládání fragmentů do mezipaměti a rozhraní API mezipaměti. ASP.NET 2.0 nabízí všechny tyto tři metody, ale přidává některé významné další funkce. Existuje několik nových závislostí mezipaměti a vývojáři teď mají možnost vytvářet také vlastní závislosti mezipaměti. Konfigurace ukládání do mezipaměti byla také výrazně vylepšena v ASP.NET 2.0.
Nové funkce
Profily mezipaměti
Profily mezipaměti umožňují vývojářům definovat konkrétní nastavení mezipaměti, která se pak dají použít na jednotlivé stránky. Pokud například máte některé stránky, jejichž platnost by měla po 12 hodinách vypršena z mezipaměti, můžete snadno vytvořit profil mezipaměti, který bude možné na tyto stránky použít. Pokud chcete přidat nový profil mezipaměti, použijte <v konfiguračním souboru část outputCacheSettings> . Níže je například uvedena konfigurace profilu mezipaměti s názvem twoday , který konfiguruje dobu trvání mezipaměti na 12 hodin.
<outputCacheSettings>
<outputCacheProfiles>
<add name="TwoDay" duration="43200" />
</outputCacheProfiles>
</outputCacheSettings>
Pokud chcete tento profil mezipaměti použít na konkrétní stránku, použijte atribut CacheProfile direktivy @ OutputCache, jak je znázorněno níže:
<%@ OutputCache CacheProfile="TwoDay" %>
Závislosti vlastní mezipaměti
ASP.NET vývojáři verze 1.x volali po vlastních závislostech mezipaměti. V ASP.NET 1.x byla třída CacheDependency zapečetěna, což vývojářům zabránilo odvozovat z ní vlastní třídy. V ASP.NET 2.0 je toto omezení odebráno a vývojáři mohou vyvíjet vlastní závislosti mezipaměti. Třída CacheDependency umožňuje vytvořit vlastní závislost mezipaměti na základě souborů, adresářů nebo klíčů mezipaměti.
Následující kód například vytvoří novou závislost vlastní mezipaměti založenou na souboru s názvem stuff.xml umístěném v kořenovém adresáři webové aplikace:
System.Web.Caching.CacheDependency dep = new
System.Web.Caching.CacheDependency(Server.MapPath("stuff.xml"));
Response.AddCacheDependency(dep);
Cache.Insert("key", "value");
V tomto scénáři při změně souboru stuff.xml je položka uložená v mezipaměti neplatná.
Pomocí klíčů mezipaměti je také možné vytvořit vlastní závislost mezipaměti. Při použití této metody odebrání klíče mezipaměti dojde ke zneplatnění dat uložených v mezipaměti. Ilustruje to následující příklad:
// insert a value into cache that will serve
// as the cache key
Cache["CacheKey"] = "something";
// create an array of cache keys
string[] keys = new String[1];
keys[0] = "CacheKey";
CacheDependency dep = new CacheDependency(null, keys);
// insert an item into cache with a dependency on
// the above CacheDependency
Cache.Insert("Key", "Value", dep);
Pokud chcete zrušit platnost položky, která byla vložena výše, jednoduše odeberte položku, která byla vložena do mezipaměti, aby fungovala jako klíč mezipaměti.
// Remove the cache item that serves as the cache key
Cache.Remove("CacheKey");
Všimněte si, že klíč položky, která funguje jako klíč mezipaměti, musí být stejný jako hodnota přidaná do pole klíčů mezipaměti.
Polling-Based závislostí mezipaměti SQL (označované také jako závislosti Table-Based)
SQL Server 7 a 2000 používají pro závislosti mezipaměti SQL model založený na dotazování. Model založený na dotazování používá trigger pro tabulku databáze, který se aktivuje, když se data v tabulce změní. Tato aktivační událost aktualizuje pole changeId v tabulce oznámení, které ASP.NET pravidelně kontrolovat. Pokud bylo pole changeId aktualizováno, ASP.NET ví, že se data změnila, a zruší platnost dat uložených v mezipaměti.
Poznámka
SQL Server 2005 může také používat model založený na dotazování, ale protože model založený na dotazování není nejúčinnější model, je vhodné použít model založený na dotazech (probíraný později) s SQL Server 2005.
Aby závislost mezipaměti SQL používající model založený na dotazování fungovala správně, musí být v tabulkách povolená oznámení. Toho lze dosáhnout programově pomocí třídy SqlCacheDependencyAdmin nebo pomocí nástroje aspnet_regsql.exe.
Následující příkazový řádek zaregistruje tabulku Products v databázi Northwind umístěné v instanci SQL Server s názvem dbase pro závislost mezipaměti SQL.
aspnet_regsql -S dbase -ed -d Northwind -E -et -t Products
Následuje vysvětlení přepínačů příkazového řádku použitých ve výše uvedeném příkazu:
Přepínač příkazového řádku | Účel |
---|---|
-S server | Určuje název serveru. |
-Ed | Určuje, že databáze by měla být povolena pro závislost mezipaměti SQL. |
-d database_name | Určuje název databáze, který má být povolený pro závislost mezipaměti SQL. |
-E | Určuje, že aspnet_regsql při připojování k databázi používat ověřování systému Windows. |
-Et | Určuje, že povolujeme tabulku databáze pro závislost mezipaměti SQL. |
-t table_name | Určuje název tabulky databáze, která se má povolit pro závislost mezipaměti SQL. |
Poznámka
Pro aspnet_regsql.exe jsou k dispozici další přepínače. Úplný seznam zobrazíte spuštěním příkazu aspnet_regsql.exe -? z příkazového řádku.
Po spuštění tohoto příkazu se v databázi SQL Server provedou následující změny:
- Přidá se AspNet_SqlCacheTablesForChangeNotification tabulka. Tato tabulka obsahuje jeden řádek pro každou tabulku v databázi, pro kterou je povolená závislost mezipaměti SQL.
- V databázi se vytvoří následující uložené procedury:
AspNet_SqlCachePollingStoredProcedure | Dotazuje AspNet_SqlCacheTablesForChangeNotification tabulku a vrátí všechny tabulky, které jsou povolené pro závislost mezipaměti SQL, a hodnotu changeId pro každou tabulku. Tento uložený nástroj se používá k dotazování k určení, jestli se data změnila. |
---|---|
AspNet_SqlCacheQueryRegisteredTablesStoredProcedure | Vrátí všechny tabulky povolené pro závislost mezipaměti SQL dotazováním tabulky AspNet_SqlCacheTablesForChangeNotification a vrátí všechny tabulky povolené pro závislost mezipaměti SQL. |
AspNet_SqlCacheRegisterTableStoredProcedure | Zaregistruje tabulku pro závislost mezipaměti SQL přidáním potřebné položky do tabulky oznámení a přidá trigger. |
AspNet_SqlCacheUnRegisterTableStoredProcedure | Zruší registraci tabulky pro závislost mezipaměti SQL odebráním položky v tabulce oznámení a odebere trigger. |
AspNet_SqlCacheUpdateChangeIdStoredProcedure | Aktualizace tabulku oznámení zvýšením id změny změněné tabulky. ASP.NET tuto hodnotu používá k určení, jestli se data změnila. Jak je uvedeno níže, tento uložený nástroj se spustí triggerem vytvořeným při povolení tabulky. |
- Pro tabulku se vytvoří trigger SQL Server s názvem table_name_AspNet_SqlCacheNotification_Trigger. Tento trigger spustí AspNet_SqlCacheUpdateChangeIdStoredProcedure při provedení příkazu INSERT, UPDATE nebo DELETE v tabulce.
- Do databáze se přidá SQL Server role s názvem aspnet_ChangeNotification_ReceiveNotificationsOnlyAccess.
Role aspnet_ChangeNotification_ReceiveNotificationsOnlyAccess SQL Server má oprávnění EXEC k AspNet_SqlCachePollingStoredProcedure. Aby model dotazování fungoval správně, musíte do role aspnet_ChangeNotification_ReceiveNotificationsOnlyAccess přidat svůj účet procesu. Nástroj aspnet_regsql.exe to za vás neudělá.
Konfigurace Polling-Based závislostí mezipaměti SQL
Konfigurace závislostí mezipaměti SQL založených na dotazování vyžaduje několik kroků. Prvním krokem je povolení databáze a tabulky, jak je popsáno výše. Po dokončení tohoto kroku bude zbytek konfigurace následující:
- Konfigurace konfiguračního souboru ASP.NET
- Konfigurace SqlCacheDependency
Konfigurace konfiguračního souboru ASP.NET
Kromě přidání připojovacího řetězce, jak je popsáno v předchozím modulu, musíte také nakonfigurovat <element mezipaměti> s elementem <sqlCacheDependency> , jak je znázorněno níže:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="Pubs"
connectionString="Data Source=(local);
Initial Catalog=pubs;Integrated Security=true;"
providerName="System.Data.SqlClient" />
</connectionStrings>
<system.web>
<caching>
<sqlCacheDependency enabled = "true" pollTime = "60000" >
<databases>
<add name="pubs" connectionStringName = "pubs" pollTime = "9000000" />
</databases>
</sqlCacheDependency>
</caching>
</system.web>
</configuration>
Tato konfigurace umožňuje závislost mezipaměti SQL na databázi pubs . Všimněte si, že atribut pollTime v elementu <sqlCacheDependency> má výchozí hodnotu 60000 milisekund nebo 1 minutu. (Tato hodnota nesmí být menší než 500 milisekund.) V tomto příkladu <element add> přidá novou databázi a přepíše pollTime nastavením na 9000000 milisekund.
Konfigurace SqlCacheDependency
Dalším krokem je konfigurace SqlCacheDependency. Nejjednodušším způsobem, jak toho dosáhnout, je zadat hodnotu atributu SqlDependency v direktivě @ Outcache následujícím způsobem:
<%@ OutputCache duration="60"
VaryByParam="none" SqlDependency="pubs:authors" %>
Ve výše uvedené direktivě @ OutputCache je pro tabulku authors v databázi pubs nakonfigurovaná závislost mezipaměti SQL. Více závislostí je možné nakonfigurovat tak, že je oddělíte středníkem, například takto:
<%@ OutputCache duration="60"
VaryByParam="none"
SqlDependency="database_name:table_name;database_name:table_name" %>
Další metodou konfigurace SqlCacheDependency je provést programově. Následující kód vytvoří novou závislost mezipaměti SQL na tabulce authors v databázi pubs .
SqlCacheDependency dep = new SqlCacheDependency("pubs", "authors");
Jednou z výhod programového definování závislosti mezipaměti SQL je, že můžete zpracovat všechny výjimky, ke kterým může dojít. Pokud se například pokusíte definovat závislost mezipaměti SQL pro databázi, která nebyla povolena pro oznámení, bude vyvolána výjimka DatabaseNotEnabledForNotificationException . V takovém případě se můžete pokusit povolit databázi pro oznámení voláním metody SqlCacheDependencyAdmin.EnableNotifications a předáním názvu databáze.
Podobně pokud se pokusíte definovat závislost mezipaměti SQL pro tabulku, která nebyla povolena pro oznámení, bude vyvolána Výjimka TableNotEnabledForNotificationException . Pak můžete volat metodu SqlCacheDependencyAdmin.EnableTableForNotifications , která jí předává název databáze a název tabulky.
Následující ukázka kódu ukazuje, jak správně nakonfigurovat zpracování výjimek při konfiguraci závislosti mezipaměti SQL.
try {
SqlCacheDependency SqlDep = new
SqlCacheDependency("pubs", "authors");
} catch (DatabaseNotEnabledForNotificationException exDBDis) {
try {
SqlCacheDependencyAdmin.EnableNotifications("pubs");
} catch (UnauthorizedAccessException exPerm) {
Response.Redirect("ErrorPage.htm");
}
} catch (TableNotEnabledForNotificationException exTabDis) {
try {
SqlCacheDependencyAdmin.EnableTableForNotifications("pubs",
"authors");
} catch (System.Data.SqlClient.SqlException exc) {
Response.Redirect("ErrorPage.htm");
}
} finally {
Cache.Insert("SqlSource", Source1, SqlDep);
}
Další informace: https://msdn.microsoft.com/library/t9x04ed2.aspx
Query-Based Závislosti mezipaměti SQL (pouze SQL Server 2005)
Při použití SQL Server 2005 pro závislost mezipaměti SQL není model založený na dotazování nutný. Při použití s SQL Server 2005 komunikují závislosti mezipaměti SQL přímo prostřednictvím připojení SQL k instanci SQL Server (není nutná žádná další konfigurace) pomocí oznámení dotazů SQL Server 2005.
Nejjednodušším způsobem, jak povolit oznámení na základě dotazů, je deklarativně nastavit atribut SqlCacheDependency objektu zdroje dat na CommandNotification a nastavit atribut EnableCaching na hodnotu true. Při použití této metody není vyžadován žádný kód. Pokud se výsledek příkazu provedeného proti zdroji dat změní, zruší platnost dat mezipaměti.
Následující příklad konfiguruje správu zdroje dat pro závislost mezipaměti SQL:
<asp:SqlDataSource ID="ProductList" runat="server"
ConnectionString="<%$ ConnectionStrings:Northwind %>"
EnableCaching="true"
SqlCacheDependency="CommandNotification"
SelectCommand="SELECT * FROM [Products]" />
V tomto případě, pokud dotaz zadaný v SelectCommand vrátí jiný výsledek než původně, výsledky, které jsou uloženy v mezipaměti jsou neplatné.
Můžete také určit, že všechny zdroje dat budou povoleny pro závislosti mezipaměti SQL nastavením atributu SqlDependencydirektivy @ OutputCache na CommandNotification. Ilustruje to následující příklad.
<%@ OutputCache SqlDependency="CommandNotification"
duration="60" VaryByParam="none" %>
Poznámka
Další informace o oznámeních dotazů v SQL Server 2005 najdete v tématu SQL Server Books Online.
Další metodou konfigurace závislosti mezipaměti SQL založené na dotazech je to provést programově pomocí třídy SqlCacheDependency. Následující ukázka kódu ukazuje, jak se to dělá.
string sql = "SELECT ProductName, ProductID FROM Products";
SqlConnection conn = new
SqlConnection(ConfigurationManager.ConnectionStrings["Northwind"].ConnectionString);
SqlCommand cmd = new SqlCommand(sql, conn);
SqlCacheDependency dep = new SqlCacheDependency(cmd);
Response.AddCacheDependency(dep);
Další informace: https://msdn.microsoft.com/library/default.asp?url=/library/enus/dnvs05/html/querynotification.asp
Substituce po mezipaměti
Ukládání stránky do mezipaměti může výrazně zvýšit výkon webové aplikace. V některých případech ale potřebujete uložit většinu stránky do mezipaměti a některé fragmenty v rámci stránky být dynamické. Pokud například vytvoříte stránku s příspěvky, která je po nastavená časová období zcela statická, můžete nastavit ukládání celé stránky do mezipaměti. Pokud jste chtěli zahrnout rotující reklamní banner, který se změnil u každé žádosti o stránku, musí být část stránky obsahující reklamu dynamická. Pokud chcete stránku uložit do mezipaměti, ale dynamicky nahrazovat nějaký obsah, můžete použít ASP.NET nahrazení mezipaměti. Při nahrazení mezipaměti po nahrazování se celá stránka ukládá do mezipaměti s konkrétními částmi označenými jako vyloučené z ukládání do mezipaměti. V příkladu reklamních bannerů vám ovládací prvek AdRotator umožňuje využít náhradu po mezipaměti tak, aby se reklamy dynamicky vytvářely pro každého uživatele a pro každou aktualizaci stránky.
Existují tři způsoby, jak implementovat nahrazení po mezipaměti:
- Deklarativně pomocí ovládacího prvku Substituce.
- Programově pomocí rozhraní API pro řízení nahrazení.
- Implicitně pomocí ovládacího prvku AdRotator.
Ovládací prvek nahrazení
Ovládací prvek ASP.NET Substituce určuje část stránky uložené v mezipaměti, která se vytváří dynamicky, nikoli do mezipaměti. Ovládací prvek Nahrazení umístíte na místo na stránce, kde se má dynamický obsah zobrazit. Za běhu volá ovládací prvek Substituce metodu, kterou zadáte pomocí vlastnosti MethodName. Metoda musí vrátit řetězec, který pak nahradí obsah ovládacího prvku Substituce. Metoda musí být statickou metodou na ovládacím prvku Page nebo UserControl. Použití ovládacího prvku nahrazení způsobí, že se možnost ukládání do mezipaměti na straně klienta změní na mezipaměť serveru, takže stránka nebude uložena do mezipaměti v klientovi. Tím se zajistí, že budoucí požadavky na stránku znovu volají metodu pro vygenerování dynamického obsahu.
Rozhraní API pro nahrazení
Pokud chcete programově vytvořit dynamický obsah pro stránku uloženou v mezipaměti, můžete v kódu stránky volat metodu WriteSubstitution a předat jí název metody jako parametru. Metoda, která zpracovává vytvoření dynamického obsahu, přebírá jeden parametr HttpContext a vrací řetězec. Návratový řetězec je obsah, který bude nahrazen v daném umístění. Výhodou volání Metody WriteSubstitution namísto použití ovládacího prvku Substituce deklarativně je, že můžete volat metodu libovolného objektu místo volání statické metody Page nebo UserControl objektu.
Volání Metody WriteSubstitution způsobí, že se možnost ukládání do mezipaměti na straně klienta změní na mezipaměť serveru, takže stránka nebude uložena do mezipaměti v klientovi. Tím se zajistí, že budoucí požadavky na stránku znovu volají metodu pro vygenerování dynamického obsahu.
Ovládací prvek AdRotator
Ovládací prvek serveru AdRotator interně implementuje podporu pro nahrazování po mezipaměti. Pokud na stránku umístíte ovládací prvek AdRotator, vykreslí na každém požadavku jedinečnou reklamu bez ohledu na to, jestli je nadřazená stránka uložená v mezipaměti. V důsledku toho je stránka, která obsahuje ovládací prvek AdRotator, pouze uložená v mezipaměti na straně serveru.
ControlCachePolicy – třída
Třída ControlCachePolicy umožňuje programové řízení ukládání fragmentů do mezipaměti pomocí uživatelských ovládacích prvků. ASP.NET vloží uživatelské ovládací prvky do instance BasePartialCachingControl . BasePartialCachingControl Třída představuje uživatelský ovládací prvek, který má povolenou ukládání výstupu do mezipaměti.
Při přístupu BasePartialCachingControl.CachePolicy vlastnost PartialCachingControl ovládací prvek, vždy obdržíte platný ControlCachePolicy objekt. Pokud však přistupujete UserControl.CachePolicy vlastnost ovládacího prvku UserControl , obdržíte platný ControlCachePolicy objekt pouze v případě, že uživatelský ovládací prvek je již zabalena BasePartialCachingControl ovládací prvek. Pokud není zabaleno, ControlCachePolicy objekt vrácený vlastností vyvolá výjimky při pokusu o manipulaci s ním, protože nemá přidružený BasePartialCachingControl. Chcete-li zjistit, zda UserControl instance podporuje ukládání do mezipaměti bez generování výjimek, zkontrolujte SupportsCaching vlastnost.
Použití třídy ControlCachePolicy je jedním z několika způsobů, jak můžete povolit ukládání výstupu do mezipaměti. Následující seznam popisuje metody, které můžete použít k povolení ukládání výstupu do mezipaměti:
- Pomocí direktivy @ OutputCache povolte ukládání výstupu do mezipaměti v deklarativních scénářích.
- Pomocí atributu PartialCachingAttribute povolte ukládání uživatelského ovládacího prvku do mezipaměti v souboru s kódem na pozadí.
- Pomocí třídy ControlCachePolicy určete nastavení mezipaměti v programových scénářích, ve kterých pracujete s instancemi BasePartialCachingControl, které byly povoleny mezipaměti pomocí jedné z předchozích metod a dynamicky načteny pomocí System.Web.UI.TemplateControl.LoadControl metoda.
S instancí ControlCachePolicy lze úspěšně manipulovat pouze mezi fázemi Init a PreRender životního cyklu řízení. Pokud upravíte objekt ControlCachePolicy po fázi PreRender, ASP.NET vyvolá výjimku, protože změny provedené po vykreslení ovládacího prvku ve skutečnosti nemohou ovlivnit nastavení mezipaměti (ovládací prvek je uložen v mezipaměti během fáze vykreslování). A konečně, instance uživatelského ovládacího prvku (a proto jeho objekt ControlCachePolicy) je k dispozici pouze pro programovou manipulaci, když je skutečně vykreslena.
Změny konfigurace ukládání do mezipaměti – element <ukládání do mezipaměti>
V ASP.NET 2.0 došlo k několika změnám konfigurace ukládání do mezipaměti. Prvek <ukládání do mezipaměti> je v ASP.NET 2.0 nový a umožňuje provádět změny konfigurace ukládání do mezipaměti v konfiguračním souboru. K dispozici jsou následující atributy.
Prvek | Popis |
---|---|
Mezipaměti | Volitelný element. Definuje globální nastavení mezipaměti aplikací. |
Outputcache | Volitelný element. Určuje nastavení výstupní mezipaměti pro celou aplikaci. |
outputCacheSettings | Volitelný element. Určuje nastavení výstupní mezipaměti, které lze použít na stránky v aplikaci. |
Sqlcachedependency | Volitelný element. Konfiguruje závislosti mezipaměti SQL pro ASP.NET aplikaci. |
Element <mezipaměti>
V elementu <mezipaměti> jsou k dispozici následující atributy:
Atribut | Popis |
---|---|
disableMemoryCollection | Volitelný logický atribut. Získá nebo nastaví hodnotu označující, zda je zakázána kolekce paměti mezipaměti, ke které dochází, když je počítač pod tlakem paměti. |
disableExpiration | Volitelný logický atribut. Získá nebo nastaví hodnotu označující, zda je vypršení platnosti mezipaměti zakázáno. Pokud je tato možnost zakázaná, nevyprší platnost položek uložených v mezipaměti a nedojde k vymazání položek mezipaměti, jejichž platnost vypršela. |
privateBytesLimit | Volitelný atribut Int64 . Získá nebo nastaví hodnotu označující maximální velikost privátních bajtů aplikace předtím, než mezipaměť začne vyprázdnit položky, jejichž platnost vypršela, a pokusí se uvolnit paměť. Tento limit zahrnuje jak paměť používanou mezipamětí, tak normální režii paměti spuštěné aplikace. Nastavení nuly znamená, že ASP.NET použije vlastní heuristiku k určení, kdy začít obnovovat paměť. |
percentagePhysicalMemoryUsedLimit | Volitelný atribut Int32 . Získá nebo nastaví hodnotu označující maximální procento fyzické paměti počítače, kterou může aplikace spotřebovat před tím, než mezipaměť začne vyprázdnit položky, jejichž platnost vypršela a pokusí se uvolnit paměť. Toto využití paměti zahrnuje jak paměť používaná mezipamětí, tak normální využití paměti spuštěné aplikace. Nastavení nuly znamená, že ASP.NET použije vlastní heuristiku k určení, kdy začít obnovovat paměť. |
privateBytesPollTime | Volitelný atribut TimeSpan . Získá nebo nastaví hodnotu označující časový interval mezi dotazováním na využití paměti privátních bajtů aplikace. |
Element <outputCache>
Pro element outputCache> jsou k dispozici <následující atributy.
Atribut | Popis |
---|---|
enableOutputCache | Volitelný logický atribut. Povolí nebo zakáže výstupní mezipaměť stránky. Pokud je tato možnost zakázaná, neukládají se do mezipaměti žádné stránky bez ohledu na programové nebo deklarativní nastavení. Výchozí hodnota je true. |
enableFragmentCache | Volitelný logický atribut. Povolí nebo zakáže mezipaměť fragmentů aplikace. Pokud je tato možnost zakázaná, neukládají se do mezipaměti žádné stránky bez ohledu na použitou direktivu @ OutputCache nebo profil ukládání do mezipaměti. Obsahuje hlavičku řízení mezipaměti, která označuje, že upstreamové proxy servery ani klienti prohlížeče by se neměli pokoušet ukládat výstup stránky do mezipaměti. Výchozí hodnota je false. |
sendCacheControlHeader | Volitelný logický atribut. Získá nebo nastaví hodnotu určující, zda cache-control:private hlavička je odeslána výstupní mezipaměť modul ve výchozím nastavení. Výchozí hodnota je false. |
omitVaryStar | Volitelný logický atribut. Povolí nebo zakáže odesílání hlavičky HTTP Vary: </strong>v odpovědi. Při výchozím nastavení falsese pro výstupní stránky v mezipaměti odešle hlavička *Vary: *. Když je hlavička Vary odeslána, umožňuje ukládání různých verzí do mezipaměti na základě toho, co je zadáno v hlavičce Vary. Například Vary:User-Agents bude ukládat různé verze stránky na základě uživatelského agenta, který žádost vystavil. Výchozí hodnota je **false. |
Element <outputCacheSettings>
Element <outputCacheSettings> umožňuje vytvářet profily mezipaměti, jak je popsáno výše. Jediným podřízeným elementem <pro element outputCacheSettings> je <element outputCacheProfiles> pro konfiguraci profilů mezipaměti.
Element <sqlCacheDependency>
Pro element sqlCacheDependency> jsou k dispozici <následující atributy.
Atribut | Popis |
---|---|
Povoleno | Povinný logický atribut. Označuje, jestli se na změny dotazují. |
pollTime | Volitelný atribut Int32 . Nastaví frekvenci, se kterou SqlCacheDependency dotazuje tabulku databáze na změny. Tato hodnota odpovídá počtu milisekund mezi po sobě jdoucím dotazováním. Nelze ji nastavit na méně než 500 milisekund. Výchozí hodnota je 1 minuta. |
Další informace
Existuje několik dalších informací, o které byste měli vědět, pokud jde o konfiguraci mezipaměti.
Pokud není nastavený limit privátních bajtů pracovního procesu, mezipaměť použije jedno z následujících omezení:
- x86 2 GB: 800 MB nebo 60 % fyzické paměti RAM podle toho, co je menší
- x86 3 GB: 1800 MB nebo 60 % fyzické paměti RAM podle toho, co je menší
- x64: 1 terabajt nebo 60 % fyzické paměti RAM podle toho, co je menší
Pokud je nastavený limit privátních bajtů pracovního procesu a <mezipaměť privateBytesLimit/> , mezipaměť použije minimálně tyto dva.
Stejně jako v 1.x zahazujeme položky mezipaměti a voláme GC. Shromažďujte je ze dvou důvodů:
- Jsme velmi blízko limitu soukromého bajtu.
- Dostupná paměť se blíží nebo je menší než 10 %
Pro nedostatek dostupné paměti můžete efektivně zakázat oříznutí a mezipaměť nastavením <procenta mezipamětiPhysicalMemoryUseLimit/> na hodnotu 100.
Na rozdíl od verze 1.x verze 2.0 pozastaví oříznutí a shromáždí volání při posledním uvolňování paměti. Funkce Collect nezmenšila privátní bajty ani velikost spravovaných hald o více než 1 % limitu paměti (mezipaměti).
Cvičení 1: Vlastní závislosti mezipaměti
Vytvořte nový web.
Přidejte nový soubor XML s názvem cache.xml a uložte ho do kořenového adresáře webové aplikace.
Do metody Page_Load v kódu na pozadí souboru default.aspx přidejte následující kód:
System.Web.Caching.CacheDependency dep = new System.Web.Caching.CacheDependency(Server.MapPath("cache.xml")); Response.AddCacheDependency(dep); Cache.Insert("time", DateTime.Now.ToString()); Response.Write(Cache["time"]);
Na začátek souboru default.aspx v zobrazení zdroje přidejte následující:
<%@ OutputCache Duration="240" VaryByParam="None" %>
Projděte si soubor Default.aspx. Co říká čas?
Aktualizujte prohlížeč. Co říká čas?
Otevřete cache.xml a přidejte následující kód:
<anElement></anElement>
Uložte cache.xml.
Aktualizujte si stránku v prohlížeči. Co říká čas?
Vysvětlete, proč se místo zobrazení dříve uložených hodnot v mezipaměti aktualizoval čas:
Cvičení 2: Používání závislostí mezipaměti Polling-Based
V tomto cvičení se používá projekt, který jste vytvořili v předchozím modulu, který umožňuje úpravy dat v databázi Northwind prostřednictvím ovládacích prvků GridView a DetailsView.
Otevřete projekt v sadě Visual Studio 2005.
Spuštěním nástroje aspnet_regsql pro databázi Northwind povolte databázi a tabulku Products. Použijte následující příkaz z příkazového řádku sady Visual Studio:
aspnet_regsql -S server -ed -d Northwind -E -et -t Products
Do souboru web.config přidejte následující:
<caching> <sqlCacheDependency enabled = "true" pollTime = "60000" > <databases> <add name="Northwind" connectionStringName = "Northwind" pollTime = "9000000" /> </databases> </sqlCacheDependency> </caching>
Přidejte nový webový formulář s názvem showdata.aspx.
Na stránku showdata.aspx přidejte následující direktivu @ outputcache:
<%@ OutputCache SqlDependency="Northwind:Products" Duration="480" VaryByParam="None"%>
Do Page_Load souboru showdata.aspx přidejte následující kód:
Response.Write(DateTime.Now.ToString() + "<br><br>");
Přidejte nový ovládací prvek SqlDataSource pro showdata.aspx a nakonfigurujte ho tak, aby používal připojení k databázi Northwind. Klikněte na Další.
Zaškrtněte políčka ProductName a ProductID a klikněte na Další.
Klikněte na Dokončit.
Přidejte nový Objekt GridView na stránku showdata.aspx.
V rozevíracím seznamu zvolte SqlDataSource1.
Uložte a procházejte soubor showdata.aspx. Poznamenejte si zobrazený čas.