Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Med cachelagring kan du lagra data i minnet för snabb åtkomst. När data används igen kan program hämta data från cacheminnet i stället för att hämta dem från den ursprungliga källan. Detta kan förbättra prestanda och skalbarhet. Dessutom gör cachelagring data tillgängliga när datakällan är tillfälligt otillgänglig.
.NET Framework innehåller klasser som gör att du kan använda cachelagring i .NET Framework-program. Dessa klasser finns i System.Runtime.Caching namnområdet.
Anmärkning
Namnområdet System.Runtime.Caching är nytt i .NET Framework 4. Det här namnområdet gör cachelagring tillgänglig för alla .NET Framework-program. I tidigare versioner av .NET Framework var cachelagring endast tillgängligt i System.Web namnområdet och krävde därför ett beroende av ASP.NET klasser.
Den här genomgången visar hur du använder cachelagringsfunktionerna som är tillgängliga i .NET Framework som en del av ett WPF-program (Windows Presentation Foundation). I genomgången cachelagrade du innehållet i en textfil.
Uppgifter som illustreras i den här guiden innehåller följande:
Skapa ett WPF-programprojekt.
Lägga till en referens till .NET Framework 4.
Initierar en cache.
Lägga till en cachepost som innehåller innehållet i en textfil.
Tillhandahålla en utkastningspolicy för cacheposten.
Övervaka sökvägen till den cachelagrade filen och meddela cacheinstansen om ändringar i det övervakade objektet.
Förutsättningar
För att slutföra den här genomgången behöver du:
Visual Studio 2010.
En textfil som innehåller en liten mängd text. (Du visar innehållet i textfilen i en meddelanderuta.) Koden som illustreras i genomgången förutsätter att du arbetar med följande fil:
c:\cache\cacheText.txtDu kan dock använda valfri textfil och göra små ändringar i koden i den här genomgången.
Skapa ett WPF-programprojekt
Du börjar med att skapa ett WPF-programprojekt.
Skapa ett WPF-program
Starta Visual Studio.
I menyn Arkiv klickar du på Nytt och sedan på Nytt projekt.
Dialogrutan Nytt projekt visas.
Under Installerade mallar väljer du det programmeringsspråk som du vill använda (Visual Basic eller Visual C#).
I dialogrutan Nytt projekt väljer du WPF-program.
Anmärkning
Om du inte ser WPF-programmallen, kontrollera att du siktar på en version av .NET Framework som stöder WPF. I dialogrutan Nytt projekt väljer du .NET Framework 4 i listan.
I textrutan Namn anger du ett namn för projektet. Du kan till exempel ange WPFCaching.
Markera kryssrutan Skapa katalog för lösning .
Klicka på OK.
WPF Designer öppnas i designvyn och visar filen MainWindow.xaml. Visual Studio skapar mappen Mitt projekt , filen Application.xaml och filen MainWindow.xaml.
Rikta in sig på .NET Framework och lägga till en referens till cachelagringssammansättningarna
Som standard är WPF-program inriktade på .NET Framework 4-klientprofilen. Om du vill använda System.Runtime.Caching namnområdet i ett WPF-program måste programmet rikta in sig på .NET Framework 4 (inte .NET Framework 4-klientprofilen) och måste innehålla en referens till namnområdet.
Nästa steg är därför att ändra .NET Framework-målet och lägga till en referens till System.Runtime.Caching namnområdet.
Anmärkning
Proceduren för att ändra .NET Framework-målet skiljer sig i ett Visual Basic-projekt och i ett Visual C#-projekt.
Så här ändrar du .NET Framework-målet i Visual Basic
Högerklicka på projektnamnet i Solutions Explorer och klicka sedan på Egenskaper.
Egenskapsfönstret för programmet visas.
Klicka på fliken Kompilera.
Längst ned i fönstret klickar du på Avancerade kompileringsalternativ....
Dialogrutan Inställningar för avancerad kompilator visas.
I listan Målramverk (alla konfigurationer) väljer du .NET Framework 4. (Välj inte .NET Framework 4-klientprofil.)
Klicka på OK.
Dialogrutan Ändra målramverk visas.
I dialogrutan Ändra målramverk klickar du på Ja.
Projektet stängs och öppnas sedan igen.
Lägg till en referens till cachelagringssammansättningen genom att följa dessa steg:
Högerklicka på projektets namn i Solution Explorer och klicka sedan på Lägg till referens.
Välj fliken .NET , välj
System.Runtime.Cachingoch klicka sedan på OK.
Så här ändrar du .NET Framework-målet i ett Visual C#-projekt
Högerklicka på projektnamnet i Solution Explorer och klicka sedan på Egenskaper.
Egenskapsfönstret för programmet visas.
Klicka på fliken Program .
I listan Målramverk väljer du .NET Framework 4. (Välj inte .NET Framework 4-klientprofil.)
Lägg till en referens till cachelagringssammansättningen genom att följa dessa steg:
Högerklicka på mappen Referenser och klicka sedan på Lägg till referens.
Välj fliken .NET , välj
System.Runtime.Cachingoch klicka sedan på OK.
Lägga till en knapp i WPF-fönstret
Därefter lägger du till en knappkontroll och skapar en händelsehanterare för knappens Click händelse. Senare kommer du att lägga till kod så att när du klickar på knappen, cachas och visas innehållet i textfilen.
Så här lägger du till en knappkontroll
Dubbelklicka på filen MainWindow.xaml i Solution Explorer för att öppna den.
Dra en kontroll till fönstret under Vanliga WPF-kontroller i
ButtonMainWindow.I fönstret Egenskaper anger du
Contentegenskapen förButtonkontrollen till Hämta cache.
Initiera cachen och cachelagra en post
Därefter lägger du till koden för att utföra följande uppgifter:
Skapa en instans av cacheklassen, dvs. du instansierar ett nytt MemoryCache objekt.
Ange att cachen använder ett HostFileChangeMonitor objekt för att övervaka ändringar i textfilen.
Läs textfilen och cachelagra dess innehåll som en cache-entry.
Visa innehållet i den cachelagrade textfilen.
Så här skapar du cacheobjektet
Dubbelklicka på knappen som du nyss lade till för att skapa en händelsehanterare i filen MainWindow.xaml.cs eller MainWindow.Xaml.vb.
Överst i filen (före klassdeklarationen) lägger du till följande
Imports(Visual Basic) ellerusing(C#)-instruktioner:using System.Runtime.Caching; using System.IO;Imports System.Runtime.Caching Imports System.IOI händelsehanteraren lägger du till följande kod för att instansiera cacheobjektet:
ObjectCache cache = MemoryCache.Default;Dim cache As ObjectCache = MemoryCache.DefaultKlassen ObjectCache är en inbyggd klass som tillhandahåller ett minnesinternt objektcacheminne.
Lägg till följande kod för att läsa innehållet i en cachepost med namnet
filecontents:Dim fileContents As String = TryCast(cache("filecontents"), String)string fileContents = cache["filecontents"] as string;Lägg till följande kod för att kontrollera om cacheposten med namnet
filecontentsfinns:If fileContents Is Nothing Then End Ifif (fileContents == null) { }Om den angivna cacheposten inte finns måste du läsa textfilen och lägga till den som en cachepost i cacheminnet.
I blocket
if/thenlägger du till följande kod för att skapa ett nytt CacheItemPolicy objekt som anger att cacheposten upphör att gälla efter 10 sekunder.Dim policy As New CacheItemPolicy() policy.AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(10.0)CacheItemPolicy policy = new CacheItemPolicy(); policy.AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(10.0);Om ingen borttagnings- eller förfalloinformation anges är InfiniteAbsoluteExpirationstandardvärdet , vilket innebär att cacheposterna aldrig upphör att gälla baserat på en absolut tid. Cacheposter upphör i stället endast att gälla när minnesbelastning uppstår. Som bästa praxis bör du alltid uttryckligen ange antingen en absolut eller en glidande förfallotid.
I blocket
if/thenoch efter koden som du lade till i föregående steg lägger du till följande kod för att skapa en samling för de filsökvägar som du vill övervaka och för att lägga till sökvägen till textfilen i samlingen: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");Anmärkning
Om textfilen du vill använda inte
c:\cache\cacheText.txtär anger du den sökväg där textfilen ska användas.Efter koden som du lade till i föregående steg lägger du till följande kod för att lägga till ett nytt HostFileChangeMonitor objekt i samlingen med ändringsövervakare för cacheposten:
policy.ChangeMonitors.Add(New HostFileChangeMonitor(filePaths))policy.ChangeMonitors.Add(new HostFileChangeMonitor(filePaths));Objektet HostFileChangeMonitor övervakar textfilens sökväg och meddelar cacheminnet om ändringar sker. I detta exempel kommer cacheposten att gå ut om innehållet i filen ändras.
Efter koden som du lade till i föregående steg lägger du till följande kod för att läsa innehållet i textfilen:
fileContents = File.ReadAllText("c:\cache\cacheText.txt") & vbCrLf & DateTime.Now.ToString()fileContents = File.ReadAllText("c:\\cache\\cacheText.txt") + "\n" + DateTime.Now;Tidsstämpeln för datum och tid läggs till så att du kan se när cacheposten upphör att gälla.
Efter koden som du lade till i föregående steg lägger du till följande kod för att infoga innehållet i filen i cacheobjektet som en CacheItem instans:
cache.Set("filecontents", fileContents, policy)cache.Set("filecontents", fileContents, policy);Du anger information om hur cacheposten ska avlägsnas genom att skicka objektet CacheItemPolicy som du skapade tidigare som en parameter.
if/thenEfter blocket lägger du till följande kod för att visa det cachelagrade filinnehållet i en meddelanderuta:MessageBox.Show(fileContents)MessageBox.Show(fileContents);I menyn Skapa klickar du på Skapa WPFCaching för att skapa projektet.
Testa cachelagring i WPF-programmet
Nu kan du testa programmet.
Testa cachelagring i WPF-programmet
Tryck på CTRL+F5 för att köra programmet.
Fönstret
MainWindowvisas.Klicka på Hämta cache.
Det cachelagrade innehållet från textfilen visas i en meddelanderuta. Observera tidsstämpeln för filen.
Stäng meddelanderutan och klicka sedan på Hämta cacheminne igen.
Tidsstämpeln är oförändrad. Detta anger att det cachelagrade innehållet visas.
Vänta 10 sekunder eller mer och klicka sedan på Hämta cache igen.
Den här gången visas en ny tidsstämpel. Detta anger att principen tillåter att cacheposten upphör att gälla och att nytt cachelagrat innehåll visas.
Öppna textfilen som du skapade i en textredigerare. Gör inga ändringar än.
Stäng meddelanderutan och klicka sedan på Hämta cacheminne igen.
Lägg märke till tidsstämpeln igen.
Gör en ändring i textfilen och spara sedan filen.
Stäng meddelanderutan och klicka sedan på Hämta cacheminne igen.
Den här meddelanderutan innehåller det uppdaterade innehållet från textfilen och en ny tidsstämpel. Detta indikerar att övervakaren för ändring av värdfil avlägsnade cacheposten omedelbart när du ändrade filen, även om den absoluta tidsgränsperioden inte hade upphört att gälla.
Anmärkning
Du kan öka borttagningstiden till 20 sekunder eller mer för att ge dig mer tid att göra en ändring i filen.
Kodexempel
När du har slutfört den här genomgången liknar koden för projektet du skapade följande exempel.
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
Se även
.NET Desktop feedback