Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A gyorsítótárazás lehetővé teszi az adatok tárolását a memóriában a gyors hozzáférés érdekében. Az adatok ismételt elérésekor az alkalmazások lekérhetik az adatokat a gyorsítótárból ahelyett, hogy az eredeti forrásból kérték volna le őket. Ez javíthatja a teljesítményt és a méretezhetőséget. A gyorsítótárazás emellett elérhetővé teszi az adatokat, ha az adatforrás átmenetileg nem érhető el.
A .NET-keretrendszer olyan osztályokat biztosít, amelyek lehetővé teszik a gyorsítótárazást a .NET-keretrendszer-alkalmazásokban. Ezek az osztályok a System.Runtime.Caching névtérben találhatók.
Megjegyzés:
A System.Runtime.Caching névtér új a .NET-keretrendszer 4-ben. Ez a névtér minden .NET-keretrendszer-alkalmazás számára elérhetővé teszi a gyorsítótárazást. A .NET-keretrendszer korábbi verzióiban a gyorsítótárazás csak a System.Web névtérben volt elérhető, ezért függőséget igényelt ASP.NET osztályoktól.
Ez az útmutató bemutatja, hogyan használhatja a .NET-keretrendszerben elérhető gyorsítótárazási funkciókat a Windows Presentation Foundation (WPF) alkalmazás részeként. Az ismertetőben egy szövegfájl tartalmát gyorsítótárazza.
Az ebben az útmutatóban bemutatott feladatok a következők:
WPF-alkalmazásprojekt létrehozása.
Hivatkozás hozzáadása a .NET-keretrendszer 4-hez.
Gyorsítótár inicializálása.
Szövegfájl tartalmát tartalmazó gyorsítótárbejegyzés hozzáadása.
Kiürítési szabályzat megadása a gyorsítótár-bejegyzéshez.
A gyorsítótárazott fájl elérési útjának figyelése és a gyorsítótárpéldány értesítése a figyelt elem módosításairól.
Előfeltételek
Az útmutató elvégzéséhez a következőkre lesz szüksége:
Visual Studio 2010.
Kis mennyiségű szöveget tartalmazó szövegfájl. (A szövegfájl tartalmát egy üzenetmezőben fogja megjeleníteni.) Az útmutatóban bemutatott kód feltételezi, hogy a következő fájllal dolgozik:
c:\cache\cacheText.txtAz útmutatóban azonban bármilyen szövegfájlt használhat, és kis módosításokat végezhet a kódon.
WPF-alkalmazásprojekt létrehozása
Első lépésként hozzon létre egy WPF-alkalmazásprojektet.
WPF-alkalmazás létrehozása
Indítsa el a Visual Studiót.
A Fájl menüben kattintson az Új, majd az Új projekt elemre.
Megjelenik az Új projekt párbeszédpanel.
A Telepített sablonok területen válassza ki a használni kívánt programozási nyelvet (Visual Basic vagy Visual C#).
Az Új projekt párbeszédpanelen válassza a WPF-alkalmazás lehetőséget.
Megjegyzés:
Ha nem látja a WPF-alkalmazássablont , győződjön meg arról, hogy a WPF-t támogató .NET-keretrendszer egy verzióját célozza meg. Az Új projekt párbeszédpanelen válassza a .NET-keretrendszer 4 lehetőséget a listából.
A Név szövegmezőbe írja be a projekt nevét. Például megadhatja a WPFCaching értéket.
Jelölje be a Megoldás könyvtárának létrehozása jelölőnégyzetet.
Kattintson az OK gombra.
A WPF Designer Tervezés nézetben nyílik meg, és megjeleníti a MainWindow.xaml fájlt. A Visual Studio létrehozza a Saját projekt mappát, az Application.xaml fájlt és a MainWindow.xaml fájlt.
A .NET keretrendszer célzása és hivatkozás hozzáadása a gyorsítótárazási összetevőkhöz
Alapértelmezés szerint a WPF-alkalmazások a .NET-keretrendszer 4-ügyfélprofilt célozzák. A névtér WPF-alkalmazásokban való használatához System.Runtime.Caching az alkalmazásnak a .NET-keretrendszer 4-et kell céloznia (nem a .NET-keretrendszer 4 ügyfélprofilját), és tartalmaznia kell a névtérre mutató hivatkozást.
Ezért a következő lépés a .NET-keretrendszer céljának módosítása és a System.Runtime.Caching névtérre mutató hivatkozás hozzáadása.
Megjegyzés:
A .NET-keretrendszer céljának módosítására szolgáló eljárás a Visual Basic és a Visual C# projektben eltérő.
A cél .NET-keretrendszer módosítása a Visual Basicben
A Megoldáskezelőben kattintson a jobb gombbal a projekt nevére, majd a Tulajdonságok parancsra.
Megjelenik az alkalmazás tulajdonságok ablaka.
Kattintson a Kompatibilizálás fülre.
Az ablak alján kattintson a Speciális fordítási beállítások...gombra.
Megjelenik a Speciális fordítóbeállítások párbeszédpanel.
A Cél keretrendszer (az összes konfiguráció) listában válassza a .NET-keretrendszer 4 lehetőséget. (Ne válassza a .NET-keretrendszer 4-ügyfélprofilját.)
Kattintson az OK gombra.
Megjelenik a Célkeret módosítása párbeszédpanel.
A Cél-keretrendszer módosítása párbeszédpanelen kattintson az Igen gombra.
A projekt bezárul, majd újra megnyílik.
Adjon hozzá egy hivatkozást a gyorsítótárazási összeállításhoz az alábbi lépések követésével.
A Megoldáskezelőben kattintson a jobb gombbal a projekt nevére, majd kattintson a Hivatkozás hozzáadása parancsra.
Válassza a .NET lapot, válassza ki
System.Runtime.Caching, majd kattintson az OK gombra.
A cél .NET-keretrendszer módosítása Visual C# projektben
A Megoldáskezelőben kattintson a jobb gombbal a projekt nevére, majd a Tulajdonságok parancsra.
Megjelenik az alkalmazás tulajdonságok ablaka.
Kattintson az Alkalmazás fülre.
A Cél-keretrendszer listában válassza a .NET-keretrendszer 4 lehetőséget. (Ne válassza a .NET-keretrendszer 4 ügyfélprofil.)
Adjon hozzá egy hivatkozást a gyorsítótárazási összeállításhoz az alábbi lépések követésével.
Kattintson a jobb gombbal a Hivatkozások mappára, majd kattintson a Hivatkozás hozzáadása parancsra.
Válassza a .NET lapot, válassza ki
System.Runtime.Caching, majd kattintson az OK gombra.
Gomb hozzáadása a WPF-ablakhoz
Ezután hozzáad egy gombvezérlőt, és létrehoz egy eseménykezelőt a gomb eseményéhez Click . Később kódot ad hozzá, így amikor a gombra kattint, a szövegfájl tartalma gyorsítótárazva lesz, és megjelenik.
Gombvezérlő hozzáadása
A Megoldáskezelőben kattintson duplán a MainWindow.xaml fájlra a megnyitásához.
Az EszközkészletÁltalános WPF-vezérlők területén húzzon egy vezérlőt
ButtonazMainWindowablakra.A Tulajdonságok ablakban állítsa a
Contentvezérlő tulajdonságátButton.
A gyorsítótár inicializálása és egy bejegyzés gyorsítótárazása
Ezután hozzáadja a kódot a következő feladatok végrehajtásához:
Hozzon létre egy példányt a gyorsítótárosztályból, vagyis létrehoz egy új MemoryCache objektumot.
Adja meg, hogy a gyorsítótár a HostFileChangeMonitor objektumot használja a szövegfájl módosításainak figyelésére.
Olvassa el a szövegfájlt, és gyorsítótárbejegyzésként gyorsítótárazza a tartalmát.
Jelenítse meg a gyorsítótárazott szövegfájl tartalmát.
A gyorsítótár-objektum létrehozása
Kattintson duplán az imént hozzáadott gombra, hogy eseménykezelőt hozzon létre a MainWindow.xaml.cs vagy MainWindow.Xaml.vb fájlban.
A fájl tetején (az osztály deklarációja előtt) adja hozzá a következő
Imports(Visual Basic) vagyusing(C#) utasításokat:using System.Runtime.Caching; using System.IO;Imports System.Runtime.Caching Imports System.IOAz eseménykezelőben adja hozzá a következő kódot a gyorsítótárobjektum példányosításához:
ObjectCache cache = MemoryCache.Default;Dim cache As ObjectCache = MemoryCache.DefaultAz ObjectCache osztály egy beépített osztály, amely memóriabeli objektum-gyorsítótárat biztosít.
Adja hozzá a következő kódot egy gyorsítótárbejegyzés
filecontentstartalmának olvasásához:Dim fileContents As String = TryCast(cache("filecontents"), String)string fileContents = cache["filecontents"] as string;Adja hozzá a következő kódot annak ellenőrzéséhez, hogy létezik-e a gyorsítótár-bejegyzés neve
filecontents:If fileContents Is Nothing Then End Ifif (fileContents == null) { }Ha a megadott gyorsítótár-bejegyzés nem létezik, be kell olvasnia a szövegfájlt, és hozzá kell adnia gyorsítótárbejegyzésként a gyorsítótárhoz.
A
if/thenblokkban adja hozzá a következő kódot egy új CacheItemPolicy objektum létrehozásához, jelezve, hogy a gyorsítótár-bejegyzés 10 másodperc után lejár.Dim policy As New CacheItemPolicy() policy.AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(10.0)CacheItemPolicy policy = new CacheItemPolicy(); policy.AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(10.0);Ha nincs megadva kiürítési vagy lejárati információ, az alapértelmezett érték InfiniteAbsoluteExpirationaz, ami azt jelenti, hogy a gyorsítótár-bejegyzések soha nem járnak le csak abszolút idő alapján. Ehelyett a gyorsítótár-bejegyzések csak akkor járnak le, ha memóriaterhelés van. Ajánlott eljárásként érdemes mindig világosan megadni az abszolút vagy a csúszó lejáratot.
if/thenA blokkon belül és az előző lépésben hozzáadott kód követésével adja hozzá a következő kódot a figyelni kívánt fájlelérési utak gyűjteményének létrehozásához, valamint a szövegfájl elérési útjának a gyűjteményhez való hozzáadásához: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");Megjegyzés:
Ha a használni kívánt szövegfájl nem
c:\cache\cacheText.txt, adja meg a használni kívánt szövegfájl elérési útját.Az előző lépésben hozzáadott kódot követve adja hozzá a következő kódot egy új HostFileChangeMonitor objektum hozzáadásához a gyorsítótár-bejegyzés változásfigyelőinek gyűjteményéhez:
policy.ChangeMonitors.Add(New HostFileChangeMonitor(filePaths))policy.ChangeMonitors.Add(new HostFileChangeMonitor(filePaths));Az HostFileChangeMonitor objektum figyeli a szövegfájl elérési útját, és értesíti a gyorsítótárat, ha változások történnek. Ebben a példában a gyorsítótár bejegyzése lejár, ha a fájl tartalma megváltozik.
Az előző lépésben hozzáadott kódot követve adja hozzá a következő kódot a szövegfájl tartalmának olvasásához:
fileContents = File.ReadAllText("c:\cache\cacheText.txt") & vbCrLf & DateTime.Now.ToString()fileContents = File.ReadAllText("c:\\cache\\cacheText.txt") + "\n" + DateTime.Now;A rendszer hozzáadja a dátum- és időbélyeget, így láthatja, hogy mikor jár le a gyorsítótár-bejegyzés.
Az előző lépésben hozzáadott kódot követve adja hozzá a következő kódot a fájl tartalmának a gyorsítótár-objektumba példányként CacheItem való beszúrásához:
cache.Set("filecontents", fileContents, policy)cache.Set("filecontents", fileContents, policy);A korábban létrehozott CacheItemPolicy objektum paraméterként való átadásával adhatja meg a gyorsítótár-bejegyzés kiürítésének módját.
A
if/thenblokk után adja hozzá a következő kódot a gyorsítótárazott fájltartalom üzenetablakban való megjelenítéséhez:MessageBox.Show(fileContents)MessageBox.Show(fileContents);A Build menüben kattintson a BUILD WPFCaching elemre a projekt létrehozásához.
WPF-alkalmazás gyorsítótárazásának tesztelése
Most már tesztelheti az alkalmazást.
Gyorsítótárazás tesztelése a WPF-alkalmazásban
Az alkalmazás futtatásához nyomja le a Ctrl+F5 billentyűkombinációt.
Az ablak
MainWindowjelenik meg.Kattintson a Gyorsítótár lekérése gombra.
A szövegfájl gyorsítótárazott tartalma megjelenik egy üzenetmezőben. Figyelje meg a fájl időbélyegét.
Zárja be az üzenetmezőt, majd kattintson ismét a Gyorsítótár kérése gombra.
Az időbélyeg nem változik. Ez azt jelzi, hogy a gyorsítótárazott tartalom megjelenik.
Várjon 10 másodpercet vagy többet, majd kattintson ismét a Gyorsítótár kérése gombra.
Ezúttal egy új időbélyeg jelenik meg. Ez azt jelzi, hogy a szabályzat lehetővé teszi a gyorsítótár bejegyzésének lejáratát, és hogy megjelenik az új gyorsítótárazott tartalom.
Egy szövegszerkesztőben nyissa meg a létrehozott szövegfájlt. Még ne végezze el a módosításokat.
Zárja be az üzenetmezőt, majd kattintson ismét a Gyorsítótár kérése gombra.
Figyelje meg újra az időbélyeget.
Módosítsa a szövegfájlt, majd mentse a fájlt.
Zárja be az üzenetmezőt, majd kattintson ismét a Gyorsítótár kérése gombra.
Ez az üzenetmező tartalmazza a szövegfájl frissített tartalmát és egy új időbélyeget. Ez azt jelzi, hogy a gazdagépfájl változásfigyelője a fájl módosításakor azonnal kiürítette a gyorsítótár-bejegyzést, annak ellenére, hogy az abszolút időtúllépési időszak nem járt le.
Megjegyzés:
A kiürítési időt 20 másodpercre vagy többre növelheti, hogy több időt hagyjon a fájl módosítására.
Kódpélda
Miután elvégezte ezt az útmutatót, a létrehozott projekt kódja az alábbi példához fog hasonlítania.
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
Lásd még
.NET Desktop feedback