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í dat do mezipaměti umožňuje ukládat data do paměti pro rychlý přístup. Po opětovném přístupu k datům mohou aplikace získat data z mezipaměti místo toho, aby je načítá z původního zdroje. To může zlepšit výkon a škálovatelnost. Ukládání do mezipaměti navíc zpřístupňuje data, když je zdroj dat dočasně nedostupný.
Rozhraní .NET Framework poskytuje třídy, které umožňují používat ukládání do mezipaměti v aplikacích .NET Framework. Tyto třídy jsou umístěny v System.Runtime.Caching oboru názvů.
Poznámka:
Jmenný prostor System.Runtime.Caching je nový v rozhraní .NET Framework 4. Tento obor názvů umožňuje ukládání do mezipaměti pro všechny aplikace rozhraní .NET Framework. V předchozích verzích rozhraní .NET Framework bylo ukládání do mezipaměti k dispozici pouze v System.Web oboru názvů, a proto vyžadovalo závislost na ASP.NET třídách.
Tento návod ukazuje, jak používat funkce ukládání do mezipaměti, které jsou k dispozici v rozhraní .NET Framework jako součást aplikace Windows Presentation Foundation (WPF). V názorném postupu ukládáte obsah textového souboru do mezipaměti.
Mezi úlohy znázorněné v tomto názorném postupu patří:
Vytvoření projektu aplikace WPF
Přidání odkazu na rozhraní .NET Framework 4
Inicializace mezipaměti
Přidání položky mezipaměti, která obsahuje obsah textového souboru
Poskytnutí zásad vyřazení pro položku mezipaměti.
Sledování cesty k souboru v mezipaměti a upozorňování instance mezipaměti na změny monitorované položky.
Požadavky
K dokončení tohoto návodu budete potřebovat:
Visual Studio 2010
Textový soubor, který obsahuje malé množství textu. (Obsah textového souboru se zobrazí v poli se zprávou.) Kód ilustrovaný v návodu předpokládá, že pracujete s následujícím souborem:
c:\cache\cacheText.txtMůžete ale použít libovolný textový soubor a provést malé změny kódu v tomto názorném postupu.
Vytvoření projektu aplikace WPF
Začnete vytvořením projektu aplikace WPF.
Vytvoření aplikace WPF
Spusťte Visual Studio.
V nabídce Soubor klepněte na tlačítko Nový a potom klepněte na příkaz Nový projekt.
Zobrazí se dialogové okno Nový projekt .
V části Nainstalované šablony vyberte programovací jazyk, který chcete použít (Visual Basic nebo Visual C#).
V dialogovém okně Nový projekt vyberte aplikaci WPF.
Poznámka:
Pokud se šablona aplikace WPF nezobrazí, ujistěte se, že cílíte na verzi rozhraní .NET Framework, která podporuje WPF. V dialogovém okně Nový projekt vyberte ze seznamu rozhraní .NET Framework 4.
Do textového pole Název zadejte název projektu. Můžete například zadat WPFCaching.
Zaškrtněte políčko Vytvořit adresář pro řešení .
Klikněte na OK.
Návrhář WPF se otevře v návrhovém zobrazení a zobrazí soubor MainWindow.xaml. Visual Studio vytvoří složku Můj projekt , soubor Application.xaml a soubor MainWindow.xaml.
Cílení na .NET Framework a přidání odkazu na cache sestavy
Ve výchozím nastavení cílí aplikace WPF na profil klienta rozhraní .NET Framework 4. Chcete-li použít System.Runtime.Caching obor názvů v aplikaci WPF, musí aplikace cílit na rozhraní .NET Framework 4 (nikoli na profil klienta rozhraní .NET Framework 4) a musí obsahovat odkaz na obor názvů.
Dalším krokem je tedy změna cíle rozhraní .NET Framework a přidání odkazu na System.Runtime.Caching obor názvů.
Poznámka:
Postup změny cíle rozhraní .NET Framework se liší v projektu jazyka Visual Basic a v projektu Visual C#.
Změna cílového rozhraní .NET Framework v jazyce Visual Basic
V Průzkumníku řešení klikněte pravým tlačítkem myši na název projektu a potom klikněte na příkaz Vlastnosti.
Zobrazí se okno vlastností aplikace.
Klikněte na kartu Zkompilovat.
V dolní části okna klikněte na Upřesnit možnosti kompilace....
Zobrazí se dialogové okno Upřesnit nastavení kompilátoru .
V seznamu Cílové rozhraní (všechny konfigurace) vyberte rozhraní .NET Framework 4. (Nevybírejte profil klienta rozhraní .NET Framework 4.)
Klikněte na OK.
Zobrazí se dialogové okno Změna cílové architektury .
V dialogovém okně Změnit cílovou architekturu klepněte na tlačítko Ano.
Projekt se zavře a pak se znovu otevře.
Přidejte odkaz na sestavení pro mezipaměť následovně:
V Průzkumníku řešení klikněte pravým tlačítkem myši na název projektu a potom klikněte na přidat odkaz.
Vyberte kartu .NET , vyberte
System.Runtime.Cachinga klepněte na tlačítko OK.
Změna cílového rozhraní .NET Framework v projektu Visual C#
V Průzkumníku řešení klikněte pravým tlačítkem myši na název projektu a potom klikněte na příkaz Vlastnosti.
Zobrazí se okno vlastností aplikace.
Klikněte na kartu Aplikace .
V seznamu Cílové rozhraní vyberte rozhraní .NET Framework 4. (Nevybírejte profil klienta rozhraní .NET Framework 4.)
Přidejte odkaz na sestavení pro mezipaměť následovně:
Klepněte pravým tlačítkem myši na složku Odkazy a potom klepněte na příkaz Přidat odkaz.
Vyberte kartu .NET , vyberte
System.Runtime.Cachinga klepněte na tlačítko OK.
Přidání tlačítka do okna WPF
Dále přidáte ovládací prvek tlačítka a vytvoříte obslužnou rutinu události pro událost tlačítka Click . Později přidáte kód tak, že po kliknutí na tlačítko se obsah textového souboru uloží do mezipaměti a zobrazí se.
Přidání ovládacího prvku tlačítka
V Průzkumníku řešení poklikáním otevřete soubor MainWindow.xaml.
Z panelu nástrojů v části Společné ovládací prvky WPF přetáhněte
Buttonovládací prvek doMainWindowokna.V okně Vlastnosti nastavte
ContentvlastnostButtonovládacího prvku na Get Cache.
Inicializace mezipaměti a ukládání položky do mezipaměti
Dále přidáte kód, který provede následující úlohy:
Vytvořte instanci třídy mezipaměti – to znamená, že vytvoříte instanci nového MemoryCache objektu.
Určete, že mezipaměť používá HostFileChangeMonitor objekt k monitorování změn v textovém souboru.
Přečtěte si textový soubor a uložte jeho obsah do mezipaměti jako položku mezipaměti.
Zobrazí obsah textového souboru uloženého v mezipaměti.
Vytvoření objektu mezipaměti
Poklikejte na tlačítko, které jste právě přidali, a vytvořte obslužnou rutinu události v souboru MainWindow.xaml.cs nebo MainWindow.Xaml.vb.
Na začátek souboru (před deklaraci třídy) přidejte následující
Importspříkazy (Visual Basic) nebousing(C#):using System.Runtime.Caching; using System.IO;Imports System.Runtime.Caching Imports System.IODo obslužné rutiny události přidejte následující kód pro vytvoření instance objektu mezipaměti:
ObjectCache cache = MemoryCache.Default;Dim cache As ObjectCache = MemoryCache.DefaultTřída ObjectCache je integrovaná třída, která poskytuje mezipaměť objektů v paměti.
Přidejte následující kód pro čtení obsahu položky mezipaměti s názvem
filecontents:Dim fileContents As String = TryCast(cache("filecontents"), String)string fileContents = cache["filecontents"] as string;Přidejte následující kód, který zkontroluje, jestli položka mezipaměti existuje
filecontents:If fileContents Is Nothing Then End Ifif (fileContents == null) { }Pokud zadaná položka mezipaměti neexistuje, musíte přečíst textový soubor a přidat ji jako položku mezipaměti do mezipaměti.
if/thenDo bloku přidejte následující kód pro vytvoření nového CacheItemPolicy objektu, který určuje, že platnost položky mezipaměti vyprší po 10 sekundách.Dim policy As New CacheItemPolicy() policy.AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(10.0)CacheItemPolicy policy = new CacheItemPolicy(); policy.AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(10.0);Pokud nejsou zadané žádné informace o vyřazení nebo vypršení platnosti, výchozí hodnota znamená InfiniteAbsoluteExpiration, že položky mezipaměti nikdy nevyprší na základě absolutního času. Místo toho vyprší platnost položek mezipaměti pouze v případě, že je zatížení paměti. Osvědčeným postupem je vždy explicitně zadat absolutní nebo posuvné vypršení platnosti.
Uvnitř bloku
if/thena za kódem, který jste přidali v předchozím kroku, vložte následující kód pro vytvoření kolekce cest k souborům, které chcete monitorovat, a přidejte cestu k textovému souboru do kolekce.Dim filePaths As New List(Of String)() filePaths.Add("c:\cache\cacheText.txt")List<string> filePaths = new List<string>(); filePaths.Add("c:\\cache\\cacheText.txt");Poznámka:
Pokud textový soubor, který chcete použít, není
c:\cache\cacheText.txt, zadejte cestu, kam chcete textový soubor použít.Po kódu, který jste přidali v předchozím kroku, přidejte následující kód pro přidání nového objektu HostFileChangeMonitor do kolekce monitorů změn položky mezipaměti:
policy.ChangeMonitors.Add(New HostFileChangeMonitor(filePaths))policy.ChangeMonitors.Add(new HostFileChangeMonitor(filePaths));Objekt HostFileChangeMonitor monitoruje cestu k textovému souboru a upozorní mezipaměť, pokud dojde ke změnám. V tomto příkladu vyprší platnost položky mezipaměti, pokud se obsah souboru změní.
Po kód, který jste přidali v předchozím kroku, přidejte následující kód pro čtení obsahu textového souboru:
fileContents = File.ReadAllText("c:\cache\cacheText.txt") & vbCrLf & DateTime.Now.ToString()fileContents = File.ReadAllText("c:\\cache\\cacheText.txt") + "\n" + DateTime.Now;Časové razítko je přidáno, abyste mohli vidět, kdy vyprší platnost položky mezipaměti.
Pod kód, který jste přidali v předchozím kroku, přidejte následující kód pro vložení obsahu souboru do objektu mezipaměti jako instance typu CacheItem:
cache.Set("filecontents", fileContents, policy)cache.Set("filecontents", fileContents, policy);Zadáte informace o tom, jak má být položka mezipaměti vyřazena předáním objektu CacheItemPolicy , který jste vytvořili dříve jako parametr.
if/thenZa blok přidejte následující kód, který zobrazí obsah souboru uloženého v mezipaměti v poli se zprávou:MessageBox.Show(fileContents)MessageBox.Show(fileContents);V nabídce Sestavení klikněte na Sestavit WPFCaching a sestavte projekt.
Testování ukládání do mezipaměti v aplikaci WPF
Teď můžete aplikaci otestovat.
Testování ukládání do mezipaměti v aplikaci WPF
Stiskněte klávesy CTRL+F5 a spusťte aplikaci.
Zobrazí se
MainWindowokno.Klikněte na Získat mezipaměť.
Obsah uložený v mezipaměti z textového souboru se zobrazí v poli se zprávou. Všimněte si časového razítka souboru.
Zavřete okno zprávy a znovu klikněte na Získat mezipaměť .
Časové razítko se nezmění. To znamená, že se zobrazí obsah uložený v mezipaměti.
Počkejte 10 sekund nebo déle a potom znovu klikněte na Získat mezipaměť .
Tentokrát se zobrazí nové časové razítko. To znamená, že zásada umožňuje vypršení platnosti položky mezipaměti a zobrazení nového obsahu v mezipaměti.
V textovém editoru otevřete textový soubor, který jste vytvořili. Zatím neprovádejte žádné změny.
Zavřete okno zprávy a znovu klikněte na Získat mezipaměť .
Všimněte si časového razítka znovu.
Proveďte změnu textového souboru a pak soubor uložte.
Zavřete okno zprávy a znovu klikněte na Získat mezipaměť .
Toto pole zprávy obsahuje aktualizovaný obsah z textového souboru a nové časové razítko. To znamená, že monitorování změn souboru hostitele okamžitě vyřadilo položku mezipaměti při změně souboru, i když absolutní časové období nevypršelo.
Poznámka:
Dobu vyřazení můžete zvětšit na 20 sekund nebo víc, abyste umožnili více času, než v souboru provedete změnu.
Příklad kódu
Po dokončení tohoto návodu bude kód pro projekt, který jste vytvořili, vypadat podobně jako v následujícím příkladu.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Runtime.Caching;
using System.IO;
namespace WPFCaching
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
ObjectCache cache = MemoryCache.Default;
string fileContents = cache["filecontents"] as string;
if (fileContents == null)
{
CacheItemPolicy policy = new CacheItemPolicy();
policy.AbsoluteExpiration =
DateTimeOffset.Now.AddSeconds(10.0);
List<string> filePaths = new List<string>();
filePaths.Add("c:\\cache\\cacheText.txt");
policy.ChangeMonitors.Add(new
HostFileChangeMonitor(filePaths));
// Fetch the file contents.
fileContents = File.ReadAllText("c:\\cache\\cacheText.txt") + "\n" + DateTime.Now.ToString();
cache.Set("filecontents", fileContents, policy);
}
MessageBox.Show(fileContents);
}
}
}
Imports System.Runtime.Caching
Imports System.IO
Class MainWindow
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click
Dim cache As ObjectCache = MemoryCache.Default
Dim fileContents As String = TryCast(cache("filecontents"), _
String)
If fileContents Is Nothing Then
Dim policy As New CacheItemPolicy()
policy.AbsoluteExpiration = _
DateTimeOffset.Now.AddSeconds(10.0)
Dim filePaths As New List(Of String)()
filePaths.Add("c:\cache\cacheText.txt")
policy.ChangeMonitors.Add(New _
HostFileChangeMonitor(filePaths))
' Fetch the file contents.
fileContents = File.ReadAllText("c:\cache\cacheText.txt") & vbCrLf & DateTime.Now.ToString()
cache.Set("filecontents", fileContents, policy)
End If
MessageBox.Show(fileContents)
End Sub
End Class
Viz také
.NET Desktop feedback