Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Ukládání do mezipaměti může znamenat rozdíl mezi pomalou a rychlou webovou aplikací. Tento kurz je první ze čtyř, které se podrobně podíváme na ukládání do mezipaměti v ASP.NET. Seznamte se s klíčovými koncepty ukládání do mezipaměti a zjistěte, jak použít ukládání do mezipaměti na prezentační vrstvu prostřednictvím ovládacího prvku ObjectDataSource.
Úvod
Ukládání do mezipaměti v oblasti počítačových věd je proces přebírání dat nebo informací, které jsou nákladné k získání a uložení jeho kopie do umístění, které je rychlejší pro přístup. U aplikací řízených daty často velké a složité dotazy využívají většinu doby provádění aplikace. Takový výkon aplikace pak může být často vylepšen uložením výsledků drahých databázových dotazů do paměti aplikace.
ASP.NET 2.0 nabízí řadu možností ukládání do mezipaměti. Celou webovou stránku nebo vykreslený markup uživatelského ovládacího prvku je možné ukládat do mezipaměti výstupu. Ovládací prvky ObjectDataSource a SqlDataSource poskytují také možnosti ukládání do mezipaměti, což umožňuje ukládání dat do mezipaměti na úrovni ovládacího prvku. A mezipaměť dat ASP.NET poskytuje bohaté rozhraní API pro ukládání do mezipaměti, které vývojářům stránek umožňuje programaticky ukládat objekty do mezipaměti. V tomto kurzu a dalších třech prozkoumáme použití funkcí ukládání do mezipaměti ObjectDataSource a mezipaměti dat. Podíváme se také, jak ukládat data do mezipaměti při spuštění aplikace a jak udržovat data uložená v mezipaměti aktuální prostřednictvím použití závislostí mezipaměti SQL. Tyto kurzy nevyzkoušují ukládání výstupu do mezipaměti. Podrobný pohled na ukládání výstupu do mezipaměti najdete v tématu Ukládání výstupu do mezipaměti v ASP.NET 2.0.
Ukládání do mezipaměti se dá použít na libovolném místě v architektuře, od vrstvy přístupu k datům až po prezentační vrstvu. V tomto kurzu se podíváme na použití ukládání do mezipaměti na prezentační vrstvu prostřednictvím ovládacího prvku ObjectDataSource. V dalším kurzu prozkoumáme ukládání dat do mezipaměti ve vrstvě obchodní logiky.
Koncepty ukládání klíčů do mezipaměti
Ukládání do mezipaměti může výrazně zlepšit celkový výkon a škálovatelnost aplikace tím, že vezme data, která jsou náročná k vygenerování a ukládání jeho kopie do umístění, ke kterému je možné efektivněji přistupovat. Vzhledem k tomu, že mezipaměť obsahuje jenom kopii skutečného, podkladového dat, může být zastaralá nebo zastaralá, pokud se podkladová data změní. V boji proti tomu může vývojář stránky určit kritéria, podle kterých se položka mezipaměti vyřadí z mezipaměti pomocí:
- Kritéria založená na čase položka může být přidána do mezipaměti na absolutní nebo posuvnou dobu. Vývojář stránky může například označit dobu trvání 60 sekund. Po absolutní době trvání se položka v mezipaměti vyřadí 60 sekund po přidání do mezipaměti bez ohledu na to, jak často se k ní přistupuje. Při posuvné době se položka uložená v mezipaměti vyřadí 60 sekund po posledním přístupu.
- Kritéria založená na závislostech lze při přidání položky do mezipaměti přidružit k ní. Když se závislost položky změní, vyřadí se z mezipaměti. Závislost může být soubor, jiná položka mezipaměti nebo kombinace těchto dvou. ASP.NET 2.0 také umožňuje závislostem mezipaměti SQL, které vývojářům umožňují přidat položku do mezipaměti a vyřadit ji, když se podkladová data databáze změní. V nadcházejícím kurzu Použití závislostí služby SQL Cache prozkoumáme závislosti mezipaměti SQL.
Bez ohledu na zadaná kritéria vyřazení může být položka v mezipaměti vyřazována před splněním kritérií založených na čase nebo závislostech. Pokud mezipaměť dosáhla své kapacity, je nutné před přidáním nových položek odebrat existující položky. Pokud tedy pracujete s daty uloženými v mezipaměti prostřednictvím kódu programu, je důležité, abyste vždy předpokládali, že data uložená v mezipaměti nemusí být přítomna. V dalším kurzu Ukládání dat do mezipaměti v architektuře se podíváme na vzor, který se má použít při přístupu k datům z mezipaměti.
Ukládání do mezipaměti poskytuje ekonomické prostředky pro vytlačování výkonu z aplikace. Steven Smith vyjadřuje ve svém článku ASP.NET ukládání do mezipaměti: Techniky a osvědčené postupy:
Ukládání do mezipaměti může být dobrým způsobem, jak dosáhnout dostatečného výkonu, aniž by bylo nutné provádět spoustu času a analýzy. Paměť je levná, takže pokud můžete dosáhnout výkonu, který potřebujete, uložením výstupu do mezipaměti po dobu 30 sekund místo toho, abyste strávili den nebo týden pokusem o optimalizaci kódu nebo databáze, proveďte řešení ukládání do mezipaměti (za předpokladu, že 30sekundová stará data jsou v pořádku) a přejděte dál. Nakonec se špatný návrh pravděpodobně dotáhne vás, takže byste se měli samozřejmě snažit navrhnout aplikace správně. Pokud ale potřebujete dosáhnout dostatečného výkonu ještě dnes, může být ukládání do mezipaměti vynikajícím [přístupem], získáním času na refaktorování vaší aplikace později, až budete mít čas na to.
Ukládání do mezipaměti sice může poskytovat výkonná vylepšení výkonu, ale není použitelné ve všech situacích, například u aplikací, které používají data v reálném čase, často se aktualizují nebo pokud jsou dokonce krátkodobě zastaralá data nepřijatelná. U většiny aplikací by se ale mělo používat ukládání do mezipaměti. Další informace o ukládání do mezipaměti v ASP.NET 2.0 najdete v části Ukládání do mezipaměti pro výkon v kurzech rychlých startů ASP.NET 2.0.
Krok 1: Vytvoření webových stránek pro ukládání do mezipaměti
Než začneme zkoumat funkce ukládání do mezipaměti ObjectDataSource, nejprve si udělejme čas na vytvoření ASP.NET stránek v našem webovém projektu, které budeme potřebovat pro tento kurz a další tři. Začněte přidáním nové složky s názvem Caching
. Dále do této složky přidejte následující ASP.NET stránky a nezapomeňte přidružit každou stránku ke stránce předlohy Site.master
:
Default.aspx
ObjectDataSource.aspx
FromTheArchitecture.aspx
AtApplicationStartup.aspx
SqlCacheDependencies.aspx
Obrázek 1: Přidání stránek ASP.NET pro kurzy Caching-Related
Stejně jako v ostatních složkách, ve složce Default.aspx
bude uveden seznam kurzů v této části. Vzpomeňte si, že SectionLevelTutorialListing.ascx
uživatelské řízení tuto funkci poskytuje. Tento uživatelský ovládací prvek přidejte do Default.aspx
přetažením z Průzkumníka řešení do návrhového zobrazení stránky.
Obrázek 2: Obrázek 2: Přidání SectionLevelTutorialListing.ascx
uživatelského ovládacího prvku do Default.aspx
(kliknutím zobrazíte obrázek v plné velikosti)
Nakonec přidejte tyto stránky jako položky do Web.sitemap
souboru. Konkrétně přidejte následující označení za práci s binárními daty <siteMapNode>
:
<siteMapNode title="Caching" url="~/Caching/Default.aspx"
description="Learn how to use the caching features of ASP.NET 2.0.">
<siteMapNode url="~/Caching/ObjectDataSource.aspx"
title="ObjectDataSource Caching"
description="Explore how to cache data directly from the
ObjectDataSource control." />
<siteMapNode url="~/Caching/FromTheArchitecture.aspx"
title="Caching in the Architecture"
description="See how to cache data from within the
architecture." />
<siteMapNode url="~/Caching/AtApplicationStartup.aspx"
title="Caching Data at Application Startup"
description="Learn how to cache expensive or infrequently-changing
queries at the start of the application." />
<siteMapNode url="~/Caching/SqlCacheDependencies.aspx"
title="Using SQL Cache Dependencies"
description="Examine how to have data automatically expire from the
cache when its underlying database data is modified." />
</siteMapNode>
Po aktualizaci Web.sitemap
si chvíli prohlédněte web kurzů prostřednictvím prohlížeče. Nabídka vlevo teď obsahuje položky pro tutoriály ukládání do mezipaměti.
Obrázek 3: Mapa webu nyní obsahuje položky pro návody na ukládání do mezipaměti
Krok 2: Zobrazení seznamu produktů na webové stránce
Tento kurz zkoumá, jak využívat integrované funkce ukládání do mezipaměti ovládacího prvku ObjectDataSource. Než se ale na tyto funkce podíváme, potřebujeme nejprve stránku, ze které bude možné pracovat. Pojďme vytvořit webovou stránku, která používá GridView k výpisu informací o produktu načtených ObjectDataSource z ProductsBLL
třídy.
Začněte otevřením ObjectDataSource.aspx
stránky ve Caching
složce. Přetáhněte GridView z panelu nástrojů do Návrháře, nastavte jeho ID
vlastnost na Products
, a z jeho inteligentní značky vyberte možnost vytvořit vazbu na nový ovládací prvek ObjectDataSource nazvaný ProductsDataSource
. Nakonfigurujte ObjectDataSource pro práci s ProductsBLL
třídou.
Obrázek 4: Konfigurace ObjectDataSource pro použití ProductsBLL
třídy (kliknutím zobrazíte obrázek s plnou velikostí)
Pro tuto stránku vytvoříme upravitelné GridView, abychom mohli prozkoumat, co se stane, když se data uložená v mezipaměti v ObjectDataSource upraví prostřednictvím rozhraní GridView s. Na kartě SELECT ponechte rozevírací seznam nastavený na výchozí hodnotu, GetProducts()
, ale změňte vybranou položku na kartě UPDATE na přetížení UpdateProduct
, které přijímá productName
, unitPrice
a productID
jako vstupní parametry.
Obrázek 5: Nastavte kartu UPDATE na seznam Drop-Down pro odpovídající přetížení (UpdateProduct
)
Nakonec nastavte rozevírací seznamy na kartách INSERT a DELETE na (Žádné) a klikněte na Dokončit. Po dokončení Průvodce konfigurací zdroje dat nastaví Visual Studio vlastnost OldValuesParameterFormatString
objektu ObjectDataSource na original_{0}
. Jak je popsáno v kurzu o vkládání, aktualizaci a odstraňování dat , musí být tato vlastnost odebrána z deklarativní syntaxe nebo nastavena zpět na výchozí hodnotu, {0}
aby náš pracovní postup aktualizace pokračoval bez chyby.
Kromě toho při dokončení průvodce Visual Studio přidá pole do GridView pro každé pole s daty produktu. Odeberte všechny kromě ProductName
, CategoryName
a UnitPrice
BoundFields. Dále aktualizujte HeaderText
vlastnosti každého z těchto BoundFields na Produkt, Kategorie a Cena v uvedeném pořadí. Vzhledem k tomu, že je pole ProductName
povinné, převeďte BoundField na TemplateField a do EditItemTemplate
pole přidejte RequiredFieldValidator. Podobně převeďte UnitPrice
BoundField na TemplateField a přidejte CompareValidator, aby se zajistilo, že hodnota zadaná uživatelem je platná hodnota měny, která je větší nebo rovna nule. Kromě těchto funkcí můžete bez obav provádět i jakékoli estetické změny, například zarovnat UnitPrice
hodnotu napravo nebo specifikovat formátování pro UnitPrice
text v rozhraních pro čtení a úpravy.
Umožněte upravovat GridView zaškrtnutím políčka Povolit úpravy v inteligentní značce GridView. Zaškrtněte také políčka Povolit stránkování a Povolit řazení.
Poznámka:
Potřebujete zkontrolovat, jak přizpůsobit rozhraní pro úpravy GridView? Pokud ano, vraťte se k kurzu Přizpůsobení rozhraní pro úpravu dat .
Obrázek 6: Povolení podpory gridview pro úpravy, řazení a stránkování (kliknutím zobrazíte obrázek v plné velikosti)
Po provedení těchto úprav GridView by deklarativní značení GridView a ObjectDataSource mělo vypadat podobně jako následující:
<asp:GridView ID="Products" runat="server" AutoGenerateColumns="False"
DataKeyNames="ProductID" DataSourceID="ProductsDataSource"
AllowPaging="True" AllowSorting="True">
<Columns>
<asp:CommandField ShowEditButton="True" />
<asp:TemplateField HeaderText="Product" SortExpression="ProductName">
<EditItemTemplate>
<asp:TextBox ID="ProductName" runat="server"
Text='<%# Bind("ProductName") %>'></asp:TextBox>
<asp:RequiredFieldValidator
ID="RequiredFieldValidator1" Display="Dynamic"
ControlToValidate="ProductName" SetFocusOnError="True"
ErrorMessage="You must provide a name for the product."
runat="server">*</asp:RequiredFieldValidator>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server"
Text='<%# Bind("ProductName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="CategoryName" HeaderText="Category"
ReadOnly="True" SortExpression="CategoryName" />
<asp:TemplateField HeaderText="Price" SortExpression="UnitPrice">
<EditItemTemplate>
$<asp:TextBox ID="UnitPrice" runat="server" Columns="8"
Text='<%# Bind("UnitPrice", "{0:N2}") %>'></asp:TextBox>
<asp:CompareValidator ID="CompareValidator1"
ControlToValidate="UnitPrice" Display="Dynamic"
ErrorMessage="You must enter a valid currency value with no
currency symbols. Also, the value must be greater than
or equal to zero."
Operator="GreaterThanEqual" SetFocusOnError="True"
Type="Currency" runat="server"
ValueToCompare="0">*</asp:CompareValidator>
</EditItemTemplate>
<ItemStyle HorizontalAlign="Right" />
<ItemTemplate>
<asp:Label ID="Label1" runat="server"
Text='<%# Bind("UnitPrice", "{0:c}") %>' />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:ObjectDataSource ID="ProductsDataSource" runat="server"
OldValuesParameterFormatString="{0}" SelectMethod="GetProducts"
TypeName="ProductsBLL" UpdateMethod="UpdateProduct">
<UpdateParameters>
<asp:Parameter Name="productName" Type="String" />
<asp:Parameter Name="unitPrice" Type="Decimal" />
<asp:Parameter Name="productID" Type="Int32" />
</UpdateParameters>
</asp:ObjectDataSource>
Jak je znázorněno na obrázku 7, upravitelná funkce GridView uvádí název, kategorii a cenu jednotlivých produktů v databázi. Chvíli si vyzkoušejte, jak fungují funkce stránky: seřadit výsledky, procházet je stránkami a upravit záznam.
Obrázek 7: Každý název produktu, kategorie a cena jsou uvedeny v řaditelném, stránkovatelném, upravitelném objektu GridView (kliknutím zobrazíte obrázek s plnou velikostí).
Krok 3: Zkoumání, kdy ObjectDataSource požaduje data
GridView Products
načte ke zobrazení data tím, že vyvolá Select
metodu ProductsDataSource
ObjectDataSource. Tento ObjectDataSource vytvoří instanci třídy vrstvy obchodní logiky ProductsBLL
a volá její metodu GetProducts()
, která pak volá metodu vrstvy přístupu k datům ProductsTableAdapter
GetProducts()
. Metoda DAL se připojí k databázi Northwind a vydá nakonfigurovaný SELECT
dotaz. Tato data se pak vrátí do DAL, který je zabalí do NorthwindDataTable
. Objekt DataTable se vrátí do objektu BLL, který ho vrátí do ObjectDataSource, který ho vrátí do GridView. GridView pak vytvoří GridViewRow
objekt pro každý DataRow
v DataTable a každý GridViewRow
se nakonec vykreslí do HTML, který se vrátí klientovi a zobrazí se v prohlížeči návštěvníka.
K této sekvenci událostí dochází vždy a pokaždé, když GridView potřebuje vytvořit vazbu k podkladovým datům. K tomu dochází při prvním navštívení stránky, při přechodu z jedné stránky dat na jinou, při řazení GridView nebo při úpravě dat GridView pomocí předdefinovaných úprav nebo odstraňování rozhraní. Pokud je stav zobrazení GridView deaktivován, GridView bude znovu připojen při každém postbacku. GridView může být také explicitně znovu navázán na svá data zavoláním své metody DataBind()
.
Abychom plně ocenili frekvenci načítání dat z databáze, zobrazíme zprávu, která indikuje, kdy se data znovu načítají. Přidejte ovládací prvek Label Web nad objekt GridView s názvem ODSEvents
. Vymažte jeho Text
vlastnost a nastavte jeho EnableViewState
vlastnost na false
. Pod štítek přidejte ovládací prvek Button Web a nastavte jeho Text
vlastnost na Postback.
Obrázek 8: Přidání popisku a tlačítka na stránku nad objekt GridView (kliknutím zobrazíte obrázek v plné velikosti)
Během pracovního postupu přístupu k datům se událost ObjectDataSource Selecting
aktivuje před vytvořením podkladového objektu a vyvoláním jeho nakonfigurované metody. Vytvořte obslužnou rutinu události pro tuto událost a přidejte následující kód:
protected void ProductsDataSource_Selecting(object sender,
ObjectDataSourceSelectingEventArgs e)
{
ODSEvents.Text = "-- Selecting event fired";
}
Pokaždé, když ObjectDataSource odešle požadavek na architekturu dat, popisek zobrazí text Výběr události aktivované .
Navštivte tuto stránku v prohlížeči. Když je stránka poprvé navštívena, zobrazí se text "Selecting event fired". Klikněte na tlačítko Postback a všimněte si, že text zmizí (za předpokladu, že GridView s EnableViewState
vlastnost je nastavena na true
, výchozí). Je to proto, že v postbacku je GridView rekonstruován z jeho stavu zobrazení, a proto se nepřepne na ObjectDataSource pro svá data. Řazení, stránkování nebo úprava dat však způsobí, že se GridView znovu připojí ke svému zdroji dat, a proto se znovu objeví text spojený s událostí výběru (Selecting event).
Obrázek 9: Pokaždé, když je objekt GridView znovu asociován se svým zdrojem dat, je zobrazena událost aktivace výběru (kliknutím zobrazíte obrázek v plné velikosti).
Obrázek 10: Kliknutí na tlačítko Postback způsobí, že objekt GridView bude rekonstruován ze stavu zobrazení (kliknutím zobrazíte obrázek v plné velikosti).
Může se zdát neefektivní načítat databázová data znovu, když jsou data procházena nebo seřazována. Vzhledem k tomu, že používáme výchozí stránkování, objekt ObjectDataSource načetl všechny záznamy při zobrazení první stránky. I když GridView neposkytuje podporu řazení a stránkování, musí být data načtena z databáze pokaždé, když je stránka poprvé navštívena libovolným uživatelem (a na každém postbacku, pokud je stav zobrazení zakázaný). Ale pokud GridView zobrazuje stejná data všem uživatelům, tyto dodatečné databázové požadavky jsou nadbytečné. Proč neuložení výsledků vrácených z GetProducts()
metody do mezipaměti a vytvoření vazby GridView k těmto výsledkům v mezipaměti?
Krok 4: Ukládání dat do mezipaměti pomocí ObjectDataSource
Jednoduchým nastavením několika vlastností lze ObjektDataSource nakonfigurovat tak, aby automaticky ukládaly načtená data do mezipaměti ASP.NET dat. Následující seznam shrnuje vlastnosti související s mezipamětí ObjectDataSource:
-
EnableCaching musí být nastavený tak, aby
true
povolil ukládání do mezipaměti. Výchozí hodnota jefalse
. -
CacheDuration doba v sekundách, po kterou se data ukládají do mezipaměti. Výchozí hodnota je 0. ObjectDataSource uloží data do mezipaměti pouze tehdy, pokud je
EnableCaching
,true
aCacheDuration
je nastavena na hodnotu větší než nula. -
CacheExpirationPolicy lze nastavit na
Absolute
neboSliding
. PokudAbsolute
, ObjectDataSource uloží načtená data do mezipaměti na dobuCacheDuration
sekund; pokudSliding
, platnost dat vyprší až po té, co k nim nebude přistupováno po dobuCacheDuration
sekund. Výchozí hodnota jeAbsolute
. -
Vlastnost CacheKeyDependency slouží k přidružení položek mezipaměti ObjectDataSource k existující závislosti mezipaměti. Položky dat ObjectDataSource mohou být předčasně odstraněny z mezipaměti, pokud přidružené
CacheKeyDependency
vyprší. Tato vlastnost se nejčastěji používá k přidružení závislosti mezipaměti SQL k mezipaměti ObjectDataSource, což je téma, které v budoucnu prozkoumáme v rámci tutoriálu o používání závislostí mezipaměti SQL.
Pojďme nakonfigurovat ProductsDataSource
ObjectDataSource pro ukládání dat do mezipaměti po dobu 30 sekund v absolutním měřítku. Nastavte vlastnost EnableCaching
prvku ObjectDataSource na true
a jeho vlastnost CacheDuration
na 30.
CacheExpirationPolicy
Ponechte vlastnost nastavenou na výchozí hodnotu Absolute
.
Obrázek 11: Konfigurace ObjectDataSource pro uložení dat do mezipaměti po dobu 30 sekund (kliknutím zobrazíte obrázek v plné velikosti)
Uložte změny a znovu se k této stránce můžete vrátit v prohlížeči. Text spuštění události výběru se zobrazí při první návštěvě stránky, protože data nejsou v mezipaměti. Následné postbacky aktivované kliknutím na tlačítko Postback, při řazení, stránkování nebo kliknutí na tlačítka Upravit nebo Zrušit nezobrazí znovu text spojený s aktivací události Výběr. Důvodem je to, že událost Selecting
se aktivuje pouze v případě, že ObjectDataSource získá data z příslušného objektu. Selecting
Událost se neaktivuje, pokud se data načte z mezipaměti dat.
Po 30 sekundách se data vyřadí z mezipaměti. Data budou také vyřazena z mezipaměti, pokud ObjectDataSource s Insert
, Update
nebo Delete
metody jsou vyvolány. V důsledku toho po uplynutí 30 sekund nebo kliknutí na tlačítko Aktualizovat, řazení, stránkování nebo kliknutí na tlačítka Upravit nebo Zrušit způsobí, že ObjectDataSource získá data ze svého podkladového objektu a zobrazí text Selecting
aktivovaný při spuštění události. Tyto vrácené výsledky se umístí zpět do mezipaměti dat.
Poznámka:
Pokud často vidíte zprávu o aktivaci události 'Selecting', i když očekáváte, že ObjectDataSource pracuje s daty uloženými v mezipaměti, může to být způsobeno omezením paměti. Pokud není dostatek volné paměti, data přidaná do mezipaměti objektem ObjectDataSource mohla být odstraněna. Pokud se zdá, že ObjectDataSource už nedostatečně ukládá data do mezipaměti nebo je ukládá pouze sporadicky, zavřete některé aplikace, čímž uvolníte paměť, a zkuste to znovu.
Obrázek 12 znázorňuje pracovní postup ukládání do mezipaměti ObjectDataSource. Když se na obrazovce zobrazí text aktivovaný výběrem události, je to proto, že data nebyla v mezipaměti a musela být načtena z podkladového objektu. Pokud ale tento text chybí, je to proto, že data byla k dispozici z mezipaměti. Když se data vrátí z mezipaměti, nedojde k žádnému volání podkladového objektu, a proto se nespustí žádný databázový dotaz.
Obrázek 12: ObjectDataSource Ukládá a načítá data z mezipaměti dat
Každá aplikace ASP.NET má vlastní instanci mezipaměti dat, která se sdílí na všech stránkách a návštěvnících. To znamená, že data uložená v mezipaměti dat ObjectDataSource se podobně sdílí napříč všemi uživateli, kteří stránku navštíví. Pokud to chcete ověřit, otevřete ObjectDataSource.aspx
stránku v prohlížeči. Při první návštěvě stránky se zobrazí text o spuštění události výběru (za předpokladu, že data přidaná do mezipaměti předchozími testy byla již odstraněna). Otevřete druhou instanci prohlížeče a zkopírujte a vložte adresu URL z první instance prohlížeče do druhé. Ve druhé instanci prohlížeče se text aktivovaný spuštěním události Selecting nezobrazuje, protože používá stejná data uložená v mezipaměti jako první.
Při vkládání načtených dat do mezipaměti použije ObjectDataSource hodnotu klíče mezipaměti, která zahrnuje: CacheDuration
hodnoty a CacheExpirationPolicy
vlastnosti; typ základního obchodního objektu, který používá ObjectDataSource, který je zadán prostřednictvím TypeName
vlastnosti (ProductsBLL
v tomto příkladu); hodnota SelectMethod
vlastnosti a název a hodnoty parametrů v SelectParameters
kolekci; a hodnoty jeho StartRowIndex
a MaximumRows
vlastností, které se používají při implementaci vlastního stránkování.
Vytvoření hodnoty klíče mezipaměti jako kombinace těchto vlastností zajišťuje jedinečnou položku mezipaměti při změně těchto hodnot. Například v minulých kurzech jsme se podívali na použití ProductsBLL
třídy s GetProductsByCategoryID(categoryID)
, která vrací všechny produkty pro zadanou kategorii. Jeden uživatel může přijít na stránku a prohlédnout si nápoje, které mají hodnotu CategoryID
1. Pokud by ObjectDataSource ukládal své výsledky do mezipaměti bez ohledu na SelectParameters
hodnoty, když by jiný uživatel přišel na stránku, aby si prohlédl koření, a produkty nápojů byly v mezipaměti, viděl by uložené produkty nápojů místo koření. Když se klíč mezipaměti liší na základě vlastností, které zahrnují hodnoty SelectParameters
, ObjectDataSource udržuje samostatnou položku mezipaměti pro nápoje a koření.
Nejasnosti o zastaralých datech
ObjectDataSource automaticky vyřadí své položky z mezipaměti, když je vyvolána některá z jeho Insert
, Update
nebo Delete
metod. To pomáhá chránit před zastaralými daty vymazáním položek mezipaměti při úpravě dat prostřednictvím stránky. ObjektDataSource však může pomocí ukládání do mezipaměti stále zobrazovat zastaralá data. V nejjednodušším případě může být příčinou změny dat přímo v databázi. Správce databáze možná právě spustil skript, který upravuje některé záznamy v databázi.
Tento scénář by se také mohl rozbalit jemněji. Zatímco ObjectDataSource vyřadí své položky z mezipaměti, když je volána jedna z metod úprav dat, odebrané položky v mezipaměti jsou pro konkrétní kombinaci hodnot vlastnosti ObjectDataSource (CacheDuration
, TypeName
, SelectMethod
atd.). Pokud máte dva ObjectDataSources, které používají jiné SelectMethods
nebo SelectParameters
, ale přesto mohou aktualizovat stejná data, jeden ObjectDataSource může aktualizovat řádek a zneplatnit své vlastní položky mezipaměti, ale odpovídající řádek pro druhý ObjectDataSource bude stále obsluhován z mezipaměti. Povzbuzuji vás, abyste vytvořili stránky, které tuto funkcionalitu ukážou. Vytvořte stránku, která zobrazí upravitelnou vlastnost GridView, která načítá data z ObjectDataSource, která používá ukládání do mezipaměti a je nakonfigurována pro získání dat z ProductsBLL
metody třídy s GetProducts()
. Přidejte na tuto stránku (nebo jinou) další upravitelné GridView a ObjectDataSource, ale pro tuto druhou ObjectDataSource zajistěte použití metody GetProductsByCategoryID(categoryID)
. Vzhledem k tomu, že se tyto dvě vlastnosti ObjectDataSources SelectMethod
liší, budou mít každý z nich vlastní hodnoty uložené v mezipaměti. Pokud upravíte produkt v jedné mřížce, při příštím vytvoření vazby dat zpět k druhé mřížce (stránkováním, řazením atd.), bude stále sloužit starým datům uloženým v mezipaměti a neodráží změnu provedenou z druhé mřížky.
Stručně řečeno, používejte vypršení platnosti na základě času pouze v případě, že jste ochotni mít potenciál zastaralých dat, a pro scénáře, kdy je důležitá aktuálnost dat, používejte kratší vypršení platnosti. Pokud nejsou zastaralá data přijatelná, buď se vzdejte ukládání do mezipaměti, nebo použijte závislosti mezipaměti SQL (za předpokladu, že se jedná o data databáze, která ukládáte do mezipaměti). V dalším kurzu prozkoumáme závislosti mezipaměti SQL.
Shrnutí
V tomto kurzu jsme prozkoumali integrované možnosti ukládání do mezipaměti ObjectDataSource. Když jednoduše nastavíme několik vlastností, můžeme objektu ObjectDataSource dát pokyn, aby ukládaly výsledky vrácené zadaným SelectMethod
do mezipaměti dat ASP.NET.
CacheDuration
Vlastnosti CacheExpirationPolicy
označují dobu, po kterou je položka uložena v mezipaměti a jestli se jedná o absolutní nebo posuvné vypršení platnosti. Vlastnost CacheKeyDependency
přidruží všechny položky mezipaměti ObjectDataSource k existující závislosti mezipaměti. To lze použít k vyřazení položek ObjectDataSource z mezipaměti před dosažením vypršení časového limitu a obvykle se používá se závislostmi mezipaměti SQL.
Protože ObjectDataSource jednoduše ukládá své hodnoty do mezipaměti dat, můžeme replikovat integrované funkce ObjectDataSource programově. Nemá smysl to udělat na prezentační vrstvě, protože ObjectDataSource nabízí tuto funkci, ale můžeme implementovat možnosti ukládání do mezipaměti v samostatné vrstvě architektury. K tomu budeme muset opakovat stejnou logiku, kterou používá ObjectDataSource. V dalším kurzu se podíváme, jak programově pracovat s mezipamětí dat z architektury.
Šťastné programování!
Další čtení
Další informace o tématech probíraných v tomto kurzu najdete v následujících zdrojích informací:
- ASP.NET ukládání do mezipaměti: Techniky a osvědčené postupy
- Průvodce architekturou ukládání do mezipaměti pro aplikace .NET Framework
O autorovi
Scott Mitchell, autor sedmi knih ASP/ASP.NET a zakladatel 4GuysFromRolla.com, pracuje s webovými technologiemi Microsoftu od roku 1998. Scott pracuje jako nezávislý konzultant, trenér a spisovatel. Jeho nejnovější kniha je Sams Naučte se ASP.NET 2.0 během 24 hodin. Může být dosažitelný na mitchell@4GuysFromRolla.comadrese .
Zvláštní díky
Tato série kurzů byla zkontrolována mnoha užitečnými recenzenty. Vedoucí recenzentkou pro tento tutoriál byla Teresa Murphy. Chcete si projít nadcházející články MSDN? Pokud ano, napište mi zprávu na mitchell@4GuysFromRolla.com.