Megosztás a következőn keresztül:


Útmutató: Alkalmazásadatok gyorsítótárazása WPF-alkalmazásban

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.txt

    Az ú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

  1. Indítsa el a Visual Studiót.

  2. A Fájl menüben kattintson az Új, majd az Új projekt elemre.

    Megjelenik az Új projekt párbeszédpanel.

  3. A Telepített sablonok területen válassza ki a használni kívánt programozási nyelvet (Visual Basic vagy Visual C#).

  4. 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.

  5. A Név szövegmezőbe írja be a projekt nevét. Például megadhatja a WPFCaching értéket.

  6. Jelölje be a Megoldás könyvtárának létrehozása jelölőnégyzetet.

  7. 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

  1. A Megoldáskezelőben kattintson a jobb gombbal a projekt nevére, majd a Tulajdonságok parancsra.

    Megjelenik az alkalmazás tulajdonságok ablaka.

  2. Kattintson a Kompatibilizálás fülre.

  3. 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.

  4. 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.)

  5. Kattintson az OK gombra.

    Megjelenik a Célkeret módosítása párbeszédpanel.

  6. A Cél-keretrendszer módosítása párbeszédpanelen kattintson az Igen gombra.

    A projekt bezárul, majd újra megnyílik.

  7. 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.

    1. A Megoldáskezelőben kattintson a jobb gombbal a projekt nevére, majd kattintson a Hivatkozás hozzáadása parancsra.

    2. 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

  1. A Megoldáskezelőben kattintson a jobb gombbal a projekt nevére, majd a Tulajdonságok parancsra.

    Megjelenik az alkalmazás tulajdonságok ablaka.

  2. Kattintson az Alkalmazás fülre.

  3. A Cél-keretrendszer listában válassza a .NET-keretrendszer 4 lehetőséget. (Ne válassza a .NET-keretrendszer 4 ügyfélprofil.)

  4. 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.

    1. Kattintson a jobb gombbal a Hivatkozások mappára, majd kattintson a Hivatkozás hozzáadása parancsra.

    2. 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

  1. A Megoldáskezelőben kattintson duplán a MainWindow.xaml fájlra a megnyitásához.

  2. Az EszközkészletÁltalános WPF-vezérlők területén húzzon egy vezérlőt Button az MainWindow ablakra.

  3. A Tulajdonságok ablakban állítsa a Content vezérlő tulajdonságát Button.

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

  1. 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.

  2. A fájl tetején (az osztály deklarációja előtt) adja hozzá a következő Imports (Visual Basic) vagy using (C#) utasításokat:

    using System.Runtime.Caching;
    using System.IO;
    
    Imports System.Runtime.Caching
    Imports System.IO
    
  3. Az 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.Default
    

    Az ObjectCache osztály egy beépített osztály, amely memóriabeli objektum-gyorsítótárat biztosít.

  4. 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;
    
  5. 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 If
    
    if (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.

  6. A if/then blokkban 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.

  7. if/then A 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.

  8. 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.

  9. 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.

  10. 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.

  11. A if/then blokk 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);
    
  12. 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

  1. Az alkalmazás futtatásához nyomja le a Ctrl+F5 billentyűkombinációt.

    Az ablak MainWindow jelenik meg.

  2. 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.

  3. 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.

  4. 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.

  5. Egy szövegszerkesztőben nyissa meg a létrehozott szövegfájlt. Még ne végezze el a módosításokat.

  6. 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.

  7. Módosítsa a szövegfájlt, majd mentse a fájlt.

  8. 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