İzlenecek yol: WPF Uygulamasında Uygulama Verilerini Önbelleğe Alma

Önbelleğe Alma hızlı erişim için verileri bellekte depolamanıza olanak sağlar. Verilere yeniden erişilirse, uygulamalar verileri özgün kaynaktan almak yerine önbellekten alabiliyor. Bu, performansı ve ölçeklenebilirliği geliştirebilir. Ayrıca önbelleğe alma, veri kaynağı geçici olarak kullanım dışı olduğunda verileri kullanılabilir hale getirir.

Bu .NET Framework, .NET Framework uygulamalarında önbelleğe almayı kullanma .NET Framework sağlar. Bu sınıflar ad alanına System.Runtime.Caching bulunur.

Not

Ad System.Runtime.Caching alanı, .NET Framework 4'te yenidir. Bu ad alanı, önbelleğe alma özelliğini tüm .NET Framework sağlar. Önceki sürümlerde .NET Framework, önbelleğe alma yalnızca ad alanı içinde kullanılabilirdi ve bu nedenle ASP.NET System.Web gerekirdi.

Bu kılavuzda, .NET Framework (WPF) uygulamasının bir parçası olarak Windows Presentation Foundation nasıl kullanabileceğiniz açıklanır. Kılavuzda, bir metin dosyasının içeriğini önbelleğe alırsiniz.

Bu kılavuzda gösterilen görevler aşağıdakileri içerir:

  • WPF uygulama projesi oluşturma.

  • .NET Framework 4'e başvuru ekleme.

  • Önbelleği başlatma.

  • Metin dosyasının içeriğini içeren bir önbellek girişi ekleme.

  • Önbellek girişi için çıkarma ilkesi sağlama.

  • Önbelleğe alınan dosyanın yolunu izleme ve önbellek örneğine izlenen öğede yapılan değişiklikler hakkında bildirim verme.

Önkoşullar

Bu izlenecek yolu tamamlamak için aşağıdakiler gerekir:

  • Visual Studio 2010.

  • Az miktarda metin içeren bir metin dosyası. (Metin dosyasının içeriğini bir ileti kutusunda görüntülersiniz.) Kılavuzda gösterilen kod, aşağıdaki dosyayla çalıştığınız varsayıldı:

    c:\cache\cacheText.txt

    Ancak, bu kılavuzda herhangi bir metin dosyasını kullanabilir ve kodda küçük değişiklikler yapabilirsiniz.

WPF Uygulama Project

Bir WPF uygulama projesi oluşturarak başlayacaktır.

WPF uygulaması oluşturmak için

  1. Visual Studio’yu çalıştırın.

  2. Dosya menüsünde Yeni 'ye ve ardındanYeni Dosya'ya Project.

    Yeni Project iletişim kutusu görüntülenir.

  3. Yüklü Şablonlar'ınaltında, kullanmak istediğiniz programlama dilini(Visual Basicveya Visual C# ) seçin.

  4. Yeni uygulama ProjectWPF Uygulaması'ı seçin.

    Not

    WPF Uygulaması şablonunu görmüyorsanız, WPF'i destekleyen bir uygulamanın sürümünü .NET Framework emin olun. Yeni Project iletişim kutusunda, listeden .NET Framework 4'ü seçin.

  5. Ad metin kutusuna projeniz için bir ad girin. Örneğin, WPFCaching girabilirsiniz.

  6. Çözüm için dizin oluştur onay kutusunu seçin.

  7. Tamam'a tıklayın.

    WPF Tasarımcısı Tasarım görünümünde açılır ve MainWindow.xaml dosyasını görüntüler. Visual Studio My Project, Application.xaml dosyası ve MainWindow.xaml dosyasını oluşturur.

.NET Framework'i Hedefleme ve Önbelleğe Alma Derlemelerine Başvuru Ekleme

Varsayılan olarak, WPF uygulamaları .NET Framework 4 İstemci Profilini hedefler. Bir WPF uygulamasında ad alanını kullanmak System.Runtime.Caching için, uygulamanın .NET Framework 4'ü (.NET Framework 4 İstemci Profili'ne değil) hedeflemesi ve ad alanına bir başvuru içermesi gerekir.

Bu nedenle, sonraki adım hedef .NET Framework ad alanına bir başvuru System.Runtime.Caching eklemektir.

Not

Bir .NET Framework projesinde ve Visual C# Visual Basic hedefini değiştirme yordamı farklıdır.

Visual Basic'de .NET Framework hedef Visual Basic

  1. Çözüm Gezgini'ndeproje adına sağ tıklayın ve ardından Özellikler'e tıklayın.

    Uygulamanın özellikler penceresi görüntülenir.

  2. Derle sekmesine tıklayın.

  3. Pencerenin alt kısmında Gelişmiş Derleme Seçenekleri... seçeneğine tıklayın.

    Gelişmiş Derleyici Ayarlar iletişim kutusu görüntülenir.

  4. Hedef çerçeve (tüm yapılandırmalar) listesinden 4. .NET Framework seçin. (4 İstemci .NET Framework'ı seçme.)

  5. Tamam'a tıklayın.

    Hedef Çerçeve Değişikliği iletişim kutusu görüntülenir.

  6. Hedef Çerçeve Değişikliği iletişim kutusunda Evet'e tıklayın.

    Proje kapatılır ve ardından yeniden açılır.

  7. Aşağıdaki adımları kullanarak önbelleğe alma derlemesi için bir başvuru ekleyin:

    1. Bu Çözüm Gezginiproje adına sağ tıklayın ve ardından Başvuru Ekle'ye tıklayın.

    2. .NET sekmesini seçin, öğesini seçin ve ardından Tamam'a tıklayın.

Visual C# .NET Framework hedef hedefini değiştirmek için

  1. Bu Çözüm Gezginiproje adına sağ tıklayın ve ardından Özellikler'e tıklayın.

    Uygulamanın özellikler penceresi görüntülenir.

  2. Uygulama sekmesine tıklayın.

  3. Hedef çerçeve listesinden 4. .NET Framework seçin. (4 İstemci .NET Framework seçin.)

  4. Aşağıdaki adımları kullanarak önbelleğe alma derlemesi için bir başvuru ekleyin:

    1. Başvurular klasörüne sağ tıklayın ve ardından Başvuru Ekle'ye tıklayın.

    2. .NET sekmesini seçin, öğesini seçin ve ardından Tamam'a tıklayın.

WPF Penceresine Düğme Ekleme

Ardından, bir düğme denetimi ekecek ve düğmenin olayı için bir olay işleyicisi Click oluşturabilirsiniz. Daha sonra düğmesine tıklarsanız metin dosyasının içeriği önbelleğe alınarak görüntülenir.

Düğme denetimi eklemek için

  1. Bu Çözüm GezginiMainWindow.xaml dosyasına çift tıklar ve dosyayı açın.

  2. Araç Kutusundan,Ortak WPF Denetimleri'ninaltında bir denetimi pencereye sürükleyin.

  3. Özellikler penceresinde denetimin özelliğini Önbelleği Al olarak ButtonButton

Önbelleği Başlatma ve Önbelleğe Alma Başlatma

Ardından, aşağıdaki görevleri gerçekleştirmek için kodu eksersiniz:

  • Önbellek sınıfının bir örneğini oluşturun; başka bir ifadeyle yeni bir nesne örneği MemoryCache oluşturabilirsiniz.

  • Önbelleğin metin dosyasındaki HostFileChangeMonitor değişiklikleri izlemek için bir nesnesi kullandığını belirtin.

  • Metin dosyasını okuyun ve içeriğini önbellek girişi olarak önbelleğe alın.

  • Önbelleğe alınan metin dosyasının içeriğini görüntüler.

Önbellek nesnesini oluşturmak için

  1. MainWindow.xaml.cs veya MainWindow.Xaml.vb dosyasında bir olay işleyicisi oluşturmak için az önce eklenen düğmeye çift tıklayın.

  2. Dosyanın en üstüne (sınıf bildiriminden önce), aşağıdaki Imports (Visual Basic) veya using (C#) deyimlerini ekleyin:

    using System.Runtime.Caching;
    using System.IO;
    
    Imports System.Runtime.Caching
    Imports System.IO
    
  3. Olay işleyicisinde, önbellek nesnesinin örneğini oluşturması için aşağıdaki kodu ekleyin:

    ObjectCache cache = MemoryCache.Default;
    
    Dim cache As ObjectCache = MemoryCache.Default
    

    sınıfı, ObjectCache bellek içinde nesne önbelleği sağlayan yerleşik bir sınıftır.

  4. adlı önbellek girişinin içeriğini okumak için aşağıdaki kodu filecontents ekleyin:

    Dim fileContents As String = TryCast(cache("filecontents"), String)
    
    string fileContents = cache["filecontents"] as string;
    
  5. adlı önbellek girişinin mevcut olup olmadığını kontrol etmek için aşağıdaki kodu filecontents ekleyin:

    If fileContents Is Nothing Then
    
    End If
    
    if (fileContents == null)
    {
    
    }
    

    Belirtilen önbellek girdisi yoksa metin dosyasını okumanız ve önbelleğe önbellek girişi olarak eklemeniz gerekir.

  6. if/thenBloğunda, önbellek girişinin CacheItemPolicy süresinin 10 saniye sonra sona erer belirten yeni bir nesnesi oluşturmak için aşağıdaki kodu ekleyin.

    Dim policy As New CacheItemPolicy()
    policy.AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(10.0)
    
    CacheItemPolicy policy = new CacheItemPolicy();
    policy.AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(10.0);
    

    Çıkarma veya süre sonu bilgisi sağlanıyorsa varsayılan değerdir. Bu, önbellek girişlerinin hiçbir zaman yalnızca mutlak bir süreye göre InfiniteAbsoluteExpiration sona ermesi anlamına gelir. Bunun yerine, önbellek girişlerinin süresi yalnızca bellek baskısı olduğunda dolar. En iyi uygulama olarak, her zaman açıkça mutlak veya kayan bir süre sonu sağlanız gerekir.

  7. Bloğunun içinde if/then ve önceki adımda eklediğiniz kodun ardından, izlemek istediğiniz dosya yolları için bir koleksiyon oluşturmak ve metin dosyasının yolunu koleksiyona eklemek 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ı yoksa c:\cache\cacheText.txt , metin dosyasının kullanmak istediğiniz yolu belirtin.

  8. Önceki adımda eklediğiniz kodu izleyerek, HostFileChangeMonitor önbellek girdisi için değişiklik izleyicileri koleksiyonuna yeni bir nesne eklemek için aşağıdaki kodu ekleyin:

    policy.ChangeMonitors.Add(New HostFileChangeMonitor(filePaths))
    
    policy.ChangeMonitors.Add(new HostFileChangeMonitor(filePaths));
    

    HostFileChangeMonitorNesne, metin dosyasının yolunu izler ve değişiklik oluşursa önbelleğe bildirir. Bu örnekte, dosyanın içeriği değişirse önbellek girişinin kullanım süreleri dolacak.

  9. Önceki adımda eklediğiniz kodu izleyerek, metin dosyasının içeriğini okumak için aşağıdaki kodu ekleyin:

    fileContents = File.ReadAllText("c:\cache\cacheText.txt") & vbCrLf & DateTime.Now.ToString()
    
    fileContents = File.ReadAllText("c:\\cache\\cacheText.txt") + "\n" + DateTime.Now;
    

    Tarih ve saat zaman damgası eklenir, böylece önbellek girişinin süresinin ne zaman dolacağını görebileceksiniz.

  10. Önceki adımda eklediğiniz kodu izleyerek, dosyanın içeriğini önbellek nesnesine örnek olarak eklemek için aşağıdaki kodu ekleyin CacheItem :

    cache.Set("filecontents", fileContents, policy)
    
    cache.Set("filecontents", fileContents, policy);
    

    CacheItemPolicyDaha önce oluşturduğunuz nesneyi bir parametre olarak geçirerek önbellek girişinin nasıl çıkarılmalıdır?

  11. Bloğundan sonra if/then , önbelleğe alınmış dosya içeriğini bir ileti kutusunda göstermek için aşağıdaki kodu ekleyin:

    MessageBox.Show(fileContents)
    
    MessageBox.Show(fileContents);
    
  12. Build menüsünde, projenizi derlemek Için WPFCaching oluştur ' a tıklayın.

WPF uygulamasında Önbelleğe Alma test etme

Artık uygulamayı test edebilirsiniz.

WPF uygulamasında önbelleğe almayı sınamak için

  1. Uygulamayı çalıştırmak için CTRL+F5'e basın.

    MainWindowPencere görüntülenir.

  2. Önbelleği al' a tıklayın.

    Metin dosyasındaki önbelleğe alınmış içerik bir ileti kutusunda görüntülenir. Dosyadaki zaman damgasına dikkat edin.

  3. İleti kutusunu kapatın ve ardından önbelleği yeniden Al ' ı tıklatın.

    Zaman damgası değiştirilmez. Bu, önbelleğe alınan içeriğin görüntülendiğini belirtir.

  4. 10 saniye veya daha fazla bekleyip önbelleği yeniden Al ' a tıklayın.

    Bu kez yeni bir zaman damgası görüntülenir. Bu, ilkenin önbellek girişinin sona ereceğini ve önbelleğe alınmış yeni içeriğin görüntülendiğini belirtir.

  5. Bir metin düzenleyicisinde, oluşturduğunuz metin dosyasını açın. Henüz herhangi bir değişiklik yapmayın.

  6. İleti kutusunu kapatın ve ardından önbelleği yeniden Al ' ı tıklatın.

    Zaman damgasına yeniden dikkat edin.

  7. Metin dosyasında bir değişiklik yapıp dosyayı kaydedin.

  8. İleti kutusunu kapatın ve ardından önbelleği yeniden Al ' ı tıklatın.

    Bu ileti kutusunda metin dosyasındaki güncelleştirilmiş içerik ve yeni bir zaman damgası bulunur. Bu, mutlak zaman aşımı süresi dolmasa bile, ana bilgisayar dosyası değişiklik izleyicisinin, dosyayı değiştirdiğiniz sırada önbellek girdisini hemen kaldırdığını gösterir.

    Not

    Dosyada değişiklik yapmanız için daha fazla zaman tanımak üzere çıkarma süresini 20 saniye veya daha fazla artırabilirsiniz.

Kod Örneği

Bu yönergeyi tamamladıktan sonra, oluşturduğunuz projenin kodu aşağıdaki örneğe benzer olacaktır.

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

Ayrıca bkz.