İzlenecek Yol: wpf uygulamasındaki uygulama verileri önbelleğe alma
Önbelleğe alma, hızlı erişim belleğindeki verileri depolamak sağlar. Verileri yeniden erişildiğinde, uygulamalar yerine özgün kaynaktan alma önbelleğinden veri alabilirsiniz. Bu, performans ve ölçeklenebilirlik iyileştirebilir. Buna ek olarak, veri kaynağı geçici olarak kullanılamaz olduğunda kullanılabilir hale veri önbelleğe alma.
.NET Framework Sınıfları de önbelleklemesi kullanmanıza olanak sağlayan .NET Framework uygulamaları. Bu sınıflar bulunan System.Runtime.Caching ad.
Not |
---|
System.Runtime.Caching Ad alanı içinde yeni .NET Framework 4.Bu ad yapar önbelleğe alma tüm .NET Framework uygulamaları.Önceki sürümlerinde .NET Framework, önbelleğe alma yalnızca System.Web ad ve bu nedenle asp bir bağımlılık gerekli.net sınıflar. |
Bu izlenecek yolda, kullanılabilir önbelleğe alma işlevselliği nasıl gösterir .NET Framework bir parçası olarak bir Windows Presentation Foundation (WPF) uygulama. Bu izlenecek yolda, bir metin dosyasının içeriğini önbelleğe.
Bu izlenecek yolda gösterilen görevleri şunlardır:
wpf uygulama proje oluşturma.
Bir başvuru ekleyerek .NET Framework 4.
Bir önbellek başlatılıyor.
Bir metin dosyasının içeriğini içeren bir önbellek girdisi ekleniyor.
Ayrıldığında ilke önbellek girdisi sağlama.
Önbelleğe alınan dosyanın yolunu izleme ve önbellek örneği hakkında bilgilendirme için izlenen maddenin değiştirir.
Önkoşullar
Bu izlenecek yolu tamamlamak için şunları yapmanız gerekir:
Microsoft Visual Studio 2010.
Küçük miktarda metin içeren bir metin dosyası. (Metin dosyasının içeriğini bir ileti kutusunda görüntülenir.) İzlenecek yolda gösterilen kodu aşağıdaki dosyayla çalıştığınız varsayılmaktadır:
c:\cache\cacheText.txt
Ancak, herhangi bir metin dosyasını kullanın ve kod Bu izlenecek yolda, küçük değişiklikler yapmak.
wpf uygulama proje oluşturma
wpf uygulama proje oluşturarak başlayacaktır.
wpf uygulama oluşturmak için
Start Visual Studio.
De Dosya menüsünde tıklatın Yenive i Yeni bir proje.
Yeni bir proje iletişim kutusu görüntülenir.
Altında Yüklü şablonlar, kullanmak istediğiniz programlama dili seçin (Visual Basic veya Visual C#).
De Yeni bir proje Seç iletişim kutusunda wpf uygulama.
Not Görüntülenmiyorsa, wpf uygulama şablon sürümü hedefleme emin .NET Framework destekleyen wpf.De Yeni bir proje Seç iletişim kutusunda .NET Framework 4 listesi.
De ad metin kutusuna, projeniz için bir ad girin. Örneğin, WPFCaching girebilirsiniz.
Seçin çözüm için Create dizine onay kutusu.
Click OK.
wpf Tasarımcısı açılır Tasarım görüntülemek ve MainWindow.xaml dosyasını görüntüler. Visual Studiooluşturur My proje klasörü, Application.xaml dosyasını ve MainWindow.xaml dosyası.
Hedefleme.net Framework ve önbelleğe alma derlemeler başvuru ekleme
Varsayılan olarak, wpf uygulamaları hedef .NET Framework 4 İstemci Profili. Kullanmak için System.Runtime.Caching gerekir uygulama ad wpf uygulama alanında, hedef .NET Framework 4 (değil .NET Framework 4 İstemci Profili) ve ad. başvuru içermelidir
Bu nedenle, değiştirmek için sonraki adım olacaktır.net Framework hedef ve Başvuru Ekle System.Runtime.Caching ad.
Not |
---|
Değiştirme yordamı.net Framework hedef, bir Visual Basic projesi ve Visual C# projesi farklıdır. |
Hedef değiştirmek için.Visual Basic .NET Framework
De Solutions Explorer, proje adını sağ tıklatın ve sonra ' Özellikler.
Uygulamanın Özellikleri penceresi görüntülenir.
Tıklatın derleme sekmesi.
Pencerenin alt kısmında,'ı Derleme seçenekler… Gelişmiş.
Derleyici ayarları Gelişmiş iletişim kutusu görüntülenir.
De hedef framework (tüm yapılandırmaları) listesi, select .NET Framework 4. (Öğesini .NET Framework 4 İstemci Profili.)
Click OK.
Hedef Framework değiştirme iletişim kutusu görüntülenir.
De Hedef Framework değiştirme iletişim kutusunda'ı Evet.
Proje, kapalı ve sonra yeniden açılamaz.
Aaıdaki adımları izleyerek önbellek derlemesine ekleyin:
De Solution Explorer, projenin adını sağ tıklatın ve sonra ' Add Reference.
Seçin .net sekmesini seçin System.Runtime.Cachingve i Tamam.
Hedef değiştirmek için.Bir Visual C# projesi net Framework
De Solution Explorer, proje adını sağ tıklatın ve sonra ' Özellikler.
Uygulamanın Özellikleri penceresi görüntülenir.
Click the Application tab.
De hedef framework listesi, select .NET Framework 4. (Öğesini .net Framework 4 istemci profil.)
Aaıdaki adımları izleyerek önbellek derlemesine ekleyin:
Sağ başvuruları klasörü tıklatın ve sonra Add Reference.
Seçin .net sekmesini seçin System.Runtime.Cachingve i Tamam.
wpf penceresine bir düğme ekleme
Sonra bir button denetimi daha ekleyin ve düğme için bir olay işleyicisi oluşturma Click olay. Daha sonra düğmeyi tıklattığınızda, metin dosyasının içeriğini önbelleğe görüntülenen ve böylece koda eklenecek.
Bir button denetimi eklemek için
De Solution Explorer, MainWindow.xaml dosyasını açmak için çift tıklatın.
Dan araç, altında Ortak wpf denetimleri, sürükleyin bir Button için kontrol MainWindow Pencere.
De Özellikler penceresinde, Content özelliği Button Denetim alma önbellek.
Önbellek başlatılıyor ve giriş önbelleğe alma
Sonra aşağıdaki görevleri gerçekleştirmek için kodu ekleyeceksiniz:
Önbellek sınıfının bir örneğini oluşturmak — başka bir deyişle, yeni bir örneklersiniz MemoryCache nesne.
Önbelleği kullanacağını belirtmek bir HostFileChangeMonitor Nesne izleme değişiklikleri metin dosyası.
Önbellek girdisi içeriğinin önbelleğe ve metin dosyasını okuyun.
Önbelleğe alınmış metin dosyasının içeriğini görüntüler.
Cache nesnesi oluşturmak için
MainWindow.xaml.cs veya MainWindow.Xaml.vb dosyasına bir olay iþleyici oluþturmak için eklediğiniz düğmeyi çift tıklatın.
(Önce sınıf bildirimi) dosyasının en üstünde aşağıdaki ekleme Imports (Visual Basic) veya using (C#) ifadeleri:
using System.Runtime.Caching; using System.IO;
Imports System.Runtime.Caching Imports System.IO
Olay işleyicisinde cache nesnesi örneğini oluşturmak için aşağıdaki kodu ekleyin:
ObjectCache cache = MemoryCache.Default;
Dim cache As ObjectCache = MemoryCache.Default
ObjectCache Sınıftır yerleşik bir sınıf sağlayan bir bellek içi nesne önbelleği.
Adlı bir önbellek girdisinin içeriğini okumak için aşağıdaki kodu ekleyip filecontents:
Dim fileContents As String = TryCast(cache("filecontents"), String)
string fileContents = cache["filecontents"] as string;
Önbellek girdisi adlı olup olmadığını denetlemek için aşağıdaki kodu ekleyip filecontents var:
If fileContents Is Nothing Then End If
if (fileContents == null) { }
Belirtilen önbellek girdisi yoksa, metin dosyasını okuyun ve önbellek girdisi önbelleğe ekleyin.
De if/then engellemek, yeni bir oluşturmak için aşağıdaki kodu ekleyin CacheItemPolicy nesnesi belirtir, önbellek girdisi süresi10 saniye. sonra
Dim policy As New CacheItemPolicy() policy.AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(10.0)
CacheItemPolicy policy = new CacheItemPolicy(); policy.AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(10.0);
Ayrıldığında veya sona erme bilgi sağlanmazsa, varsayılan olan InfiniteAbsoluteExpiration, başka bir deyişle, hiç önbellek girdilerini sona göre yalnızca mutlak bir zaman. Bunun yerine, yalnızca bellek baskısı olduğunda önbellek girdilerini sona. En iyi yöntem, mutlak veya kaplamayı süre sonu her zaman açıkça sağlamalıdır.
İçinde if/then engellemek ve önceki adımda eklediğiniz kodun izlemek ve metin dosyasının yolunu derlemesine eklemek istediğiniz dosya yolları için bir koleksiyon oluşturmak için aşağıdaki kodu ekleyin:
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");
Not Kullanmak istediğiniz metin dosyası değilse c:\cache\cacheText.txtbelirtin yolu metin dosyasının olduğu istediğinizi kullanın.
Önceki adımda eklediğiniz kodun ardından yeni eklemek için aşağıdaki kodu ekleyin HostFileChangeMonitor Değiştir koleksiyonu nesne önbellek girdisi izler:
policy.ChangeMonitors.Add(New HostFileChangeMonitor(filePaths))
policy.ChangeMonitors.Add(new HostFileChangeMonitor(filePaths));
HostFileChangeMonitor Nesne metin dosyanın yolu izler ve değişiklikler oluşursa önbellek bildirir. Bu örnekte, dosyanın içeriği değişirse önbellek girdisi sona erecek.
Önceki adımda eklediğiniz koddan metin dosyasının içeriğini okumak için şu kodu ekleyin:
fileContents = File.ReadAllText("c:\cache\cacheText.txt") & vbCrLf & DateTime.Now.ToString()
fileContents = File.ReadAllText("c:\\cache\\cacheText.txt") + + "\n" + DateTime.Now;
Böylece, önbellek girdisi sona erdiğinde görebilmek için her tarih ve saat damgası eklenir.
Önceki adımda eklediğiniz kodun ardından dosyanın içeriğini cache nesnesi eklemek için aşağıdaki kodu ekleyin bir CacheItem örneği:
cache.Set("filecontents", fileContents, policy)
cache.Set("filecontents", fileContents, policy);
Belirttiğiniz nasıl önbellek girdisi ileterek çıkarılacak hakkında bilgi CacheItemPolicy nesne oluşturduğunuz önceki gibi bir parametre.
Sonra if/then engellemek, bir ileti kutusunda önbelleğe alınmış dosya içeriğini görüntülemek için aşağıdaki kodu ekleyin:
MessageBox.Show(fileContents)
MessageBox.Show(fileContents);
De Build menüsünde tıklatın Yapı WPFCaching proje oluşturmak için.
Önbelleğe alma wpf uygulamada test etme
Şimdi uygulamayı test edebilirsiniz.
wpf uygulamasında önbelleğe almayı sınamak için
Uygulamayı çalıştırmak için ctrl + F5 tuşlarına basın.
MainWindow Penceresi görüntülenir.
Tıklatın önbelleğe alma.
Metin dosyasından önbelleğe alınmış içeriği, bir ileti kutusunda görüntülenir. Dosya listelerken dikkat edin.
İleti kutusunu kapatmak ve i Önbelleğe alma yeniden.
Zaman damgası değişmeden kalır. Bu, önbelleğe alınmış içeriğin görüntülendiğini gösterir.
10 Saniye veya daha fazla beklemeniz ve i Önbelleğe alma yeniden.
Bu kez yeni bir zaman damgası görüntülenir. Bu ilke önbellek girdisi zaman aşımına sağlar ve yeni önbelleğe alınmış içeriğin görüntülendiğini gösterir.
Oluşturduğunuz metin dosyasını bir metin düzenleyicisinde açın. Henüz herhangi bir değişiklik yapmayın.
İleti kutusunu kapatmak ve i Önbelleğe alma yeniden.
Zaman damgası yeniden dikkat edin.
Metin dosyasına bir değişiklik yapın ve sonra dosyayı kaydedin.
İleti kutusunu kapatmak ve i Önbelleğe alma yeniden.
Bu ileti kutusunu güncellenen içeriği metin dosyasını ve yeni bir zaman damgası içerir. Bu, hemen, dosya değiştiğinde mutlak zaman aşımı süresi rağmen ana dosya değişikliği monitör önbellek girdisi çıkarttıysanız olduğunu gösterir.
Not 20 Saniye veya daha dosyasında değişiklik yapmak daha fazla süre vermek amacıyla ayrıldığında süresini artırabilir.
Code Example
Bu izlenecek yolda tamamladıktan sonra oluşturduğunuz proje kodunu aşağıdaki örnek benzeyecektir.
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
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);
}
}
}