ObjectDataSource ile Verileri Önbelleğe Alma (C#)Caching Data with the ObjectDataSource (C#)

Scott Mitchell tarafındanby Scott Mitchell

Örnek uygulamayı indirin veya PDF 'yi indirinDownload Sample App or Download PDF

Önbelleğe alma, yavaş ve hızlı bir Web uygulaması arasındaki farkı ifade edebilir.Caching can mean the difference between a slow and a fast Web application. Bu öğretici, ASP.NET ' de önbelleğe alma hakkında ayrıntılı bir bakış sunan ilk dört ilkidir.This tutorial is the first of four that take a detailed look at caching in ASP.NET. Önbelleğe alma işleminin temel kavramlarını ve ObjectDataSource denetimi aracılığıyla Sunu katmanına nasıl önbelleğe alınacağını öğrenin.Learn the key concepts of caching and how to apply caching to the Presentation Layer through the ObjectDataSource control.

GirişIntroduction

Bilgisayar bilimi ' nde, önbelleğe alma , bir kopyasını elde etmek ve bir kopyasını daha hızlı bir konuma depolamak için pahalı olan verileri veya bilgileri alma işlemidir.In computer science, caching is the process of taking data or information that is expensive to obtain and storing a copy of it in a location that is quicker to access. Veri odaklı uygulamalar için büyük ve karmaşık sorgular genellikle uygulama yürütme zamanının çoğunu kullanır.For data-driven applications, large and complex queries commonly consume the majority of the application s execution time. Bu tür bir uygulama performansı daha sonra, uygulama s belleğindeki pahalı Veritabanı sorgularının sonuçları depolanarak genellikle iyileşebilirler.Such an application s performance, then, can often be improved by storing the results of expensive database queries in the application s memory.

ASP.NET 2,0, çeşitli önbelleğe alma seçenekleri sunar.ASP.NET 2.0 offers a variety of caching options. Tüm Web sayfası veya Kullanıcı denetimi işlenmiş işaretleme, çıktı önbelleğiaracılığıyla önbelleğe alınabilir.An entire web page or User Control s rendered markup can be cached through output caching. ObjectDataSource ve SqlDataSource denetimleri, önbelleğe alma yeteneklerini de sağlar ve bu sayede verilerin Denetim düzeyinde önbelleğe alınmasına izin verir.The ObjectDataSource and SqlDataSource controls provide caching capabilities as well, thereby allowing data to be cached at the control level. Ve ASP.NET s veri önbelleği , sayfa geliştiricilerinin nesneleri programlı bir şekilde önbelleğe almasını sağlayan zengin bir önbelleğe alma API 'si sağlar.And ASP.NET s data cache provides a rich caching API that enables page developers to programmatically cache objects. Bu öğreticide ve sonraki üç adımda, ObjectDataSource s önbelleğe alma özelliklerinin yanı sıra veri önbelleğinin kullanılması anlatılmaktadır.In this tutorial and the next three we'll examine using the ObjectDataSource s caching features as well as the data cache. Ayrıca, başlangıçta uygulama genelinde verilerin nasıl önbelleğe alınacağını ve SQL önbellek bağımlılıklarının kullanımı aracılığıyla önbelleğe alınmış verilerin nasıl güncel tutulacağını araştıracağız.We'll also explore how to cache application-wide data at startup and how to keep cached data fresh through the use of SQL cache dependencies. Bu öğreticiler çıktı önbelleğe almayı araştırmaz.These tutorials do not explore output caching. Çıktı önbelleğe alma hakkında ayrıntılı bir bakış için bkz. ASP.NET 2,0 'de çıktı önbelleği.For a detailed look at output caching, see Output Caching in ASP.NET 2.0.

Önbelleğe alma, veri erişim katmanından sunum katmanı üzerinden yukarı, mimaride herhangi bir yerde uygulanabilir.Caching can be applied at any place in the architecture, from the Data Access Layer up through the Presentation Layer. Bu öğreticide, ObjectDataSource denetimi aracılığıyla sunum katmanına önbelleğe alma uygulama bölümüne bakacağız.In this tutorial we'll look at applying caching to the Presentation Layer through the ObjectDataSource control. Sonraki öğreticide Iş mantığı katmanında önbelleğe alma verilerini inceleyeceğiz.In the next tutorial we'll examine caching data at the Business Logic Layer.

Anahtar önbelleğe alma kavramlarıKey Caching Concepts

Önbelleğe alma, bir kopyasının oluşturulması ve bir kopyasını daha verimli bir yerde daha etkin erişilebilen bir konuma depolayarak bir uygulamanın genel performansını ve ölçeklenebilirliğini önemli ölçüde iyileştirebilir.Caching can greatly improve an application s overall performance and scalability by taking data that is expensive to generate and storing a copy of it in a location that can be more efficiently accessed. Önbellek gerçek, temel alınan verilerin yalnızca bir kopyasını içerdiğinden, temel alınan veriler değişirse eski veya eskiolabilir.Since the cache holds just a copy of the actual, underlying data, it can become outdated, or stale, if the underlying data changes. Bu, bir sayfa geliştiricisi, önbellek öğesinin önbellekten çıkarılabileceği ölçütü belirtebileceği, aşağıdakilerden birini kullanarak:To combat this, a page developer can indicate criteria by which the cache item will be evicted from the cache, using either:

  • Zamana dayalı ölçütler mutlak veya kayan bir süre için önbelleğe bir öğe eklenebilir.Time-based criteria an item may be added to the cache for an absolute or sliding duration. Örneğin, bir sayfa geliştiricisi bir süreyi, deyin, 60 saniye olarak gösterebilir.For example, a page developer may indicate a duration of, say, 60 seconds. Mutlak bir süre ile, önbelleğe alınan öğe, ne sıklıkta erişildiğine bakmaksızın önbelleğe eklendikten sonra 60 saniye çıkarıldı.With an absolute duration, the cached item is evicted 60 seconds after it was added to cache, regardless of how frequently it was accessed. Kayan bir süre ile, önbelleğe alınmış öğe son erişimden sonra 60 saniye çıkarıldı.With a sliding duration, the cached item is evicted 60 seconds after the last access.
  • Bağımlılık tabanlı ölçütler , bir bağımlılık, önbelleğe eklendiğinde bir öğe ile ilişkilendirilebilir.Dependency-based criteria a dependency can be associated with an item when added to the cache. Öğe bağımlılığının değişiklik yaptığı değişiklikler önbellekten çıkarıldı.When the item s dependency changes it is evicted from the cache. Bağımlılık bir dosya, başka bir önbellek öğesi veya ikisinin bir birleşimi olabilir.The dependency may be a file, another cache item, or a combination of the two. ASP.NET 2,0 Ayrıca, geliştiricilerin önbelleğe bir öğe eklemesini ve temel alınan veritabanı verileri değiştiğinde çıkarılmasını sağlayan SQL önbellek bağımlılıklarına izin verir.ASP.NET 2.0 also allows SQL cache dependencies, which enable developers to add an item to the cache and have it evicted when the underlying database data changes. SQL önbellek bağımlılıklarını yakında SQL önbellek bağımlılıkları öğreticisini kullanarak inceleyeceğiz.We will examine SQL cache dependencies in the upcoming Using SQL Cache Dependencies tutorial.

Belirtilen çıkarma ölçütlerine bakılmaksızın, zaman tabanlı veya bağımlılık tabanlı ölçütler karşılanmadan önbellekteki bir öğe atılabilir .Regardless of the eviction criteria specified, an item in the cache may be scavenged before the time-based or dependency-based criteria has been met. Önbellek kapasiteye ulaştıysa, yeni bir öğe eklenebilmesi için mevcut öğelerin kaldırılması gerekir.If the cache has reached its capacity, existing items must be removed before new ones can be added. Sonuç olarak, önbelleğe alınmış verilerle programlı olarak çalışırken, her zaman önbelleğe alınan verilerin mevcut olabileceğini varsaymanız gerekir.Consequently, when programmatically working with cached data it s vital that you always assume that the cached data may not be present. Sonraki öğreticimizde, mimarideki verileri, mimaride önbelleğe almasırasında kullanarak önbellekteki verilere erişirken kullanılacak düzene bakacağız.We'll look at the pattern to use when accessing data from the cache programmatically in our next tutorial, Caching Data in the Architecture.

Önbelleğe alma, bir uygulamadan daha fazla performans sağlayan ekonomik bir yol sağlar.Caching provides an economical means for squeezing more performance from an application. Steven Smith , makalede ASP.NET önbelleğe alma: teknikler ve en iyi uygulamalar:As Steven Smith articulates in his article ASP.NET Caching: Techniques and Best Practices:

Önbelleğe alma, çok fazla zaman ve analiz gerekmeden yeterince iyi performans sağlamak için iyi bir yoldur.Caching can be a good way to get good enough performance without requiring a lot of time and analysis. Bellek, bu nedenle, kodunuzu veya veritabanınızı en iyi duruma getirmeye çalışan bir gün veya hafta harcamak yerine çıktıyı 30 saniye boyunca önbelleğe alarak ihtiyacınız olan performansı alabilir, önbelleğe alma çözümünü (30 saniyelik eski verilerin Tamam olduğu varsayıldığında) ve üzerinde geçiş yapabilirsiniz.Memory is cheap, so if you can get the performance you need by caching the output for 30 seconds instead of spending a day or a week trying to optimize your code or database, do the caching solution (assuming 30-second old data is ok) and move on. Sonuç olarak, kötü tasarım büyük olasılıkla sizi sizin için doğru şekilde tasarlayacaktır, böylece uygulamalarınızı doğru bir şekilde tasarlamaya çalışırsınız.Eventually, poor design will probably catch up to you, so of course you should try to design your applications correctly. Ancak bugün yeterince iyi performans almanız gerekiyorsa, önbelleğe alma işlemi harika bir [yaklaşım] olabilir, bu da uygulamanızı daha sonraki bir tarihte yeniden düzenlemeniz için zaman satın alabilirsiniz.But if you just need to get good enough performance today, caching can be an excellent [approach], buying you time to refactor your application at a later date when you have the time to do so.

Önbelleğe alma işlemi, gelişmiş performans iyileştirmeleri sağlayabilse de, gerçek zamanlı, sık güncelleştirilen verileri kullanan uygulamalarla veya hatta daha fazla eski verilerin kabul edilemez olduğu durumlarda olduğu gibi tüm durumlarda geçerli değildir.While caching can provide appreciable performance enhancements, it is not applicable in all situations, such as with applications that use real-time, frequently-updating data, or where even shortly-lived stale data is unacceptable. Ancak uygulamaların çoğunluğu için önbelleğe alma kullanılmalıdır.But for the majority of applications, caching should be used. ASP.NET 2,0 ' de önbelleğe alma hakkında daha fazla arka plan için ASP.NET 2,0 hızlı başlangıç öğreticilerinin performans için önbelleğe alma bölümüne bakın.For more background on caching in ASP.NET 2.0, refer to the Caching for Performance section of the ASP.NET 2.0 QuickStart Tutorials.

1. Adım: önbelleğe alma Web sayfalarını oluşturmaStep 1: Creating the Caching Web Pages

ObjectDataSource 'un önbelleğe alma özelliklerinin araştırmasına başlamadan önce, Web sitesi projemizdeki Bu öğretici ve sonraki üç için gereken ASP.NET sayfalarını oluşturmak için ilk olarak bir süre sürer.Before we start our exploration of the ObjectDataSource s caching features, let s first take a moment to create the ASP.NET pages in our website project that we'll need for this tutorial and the next three. Cachingadlı yeni bir klasör ekleyerek başlayın.Start by adding a new folder named Caching. Ardından, aşağıdaki ASP.NET sayfalarını bu klasöre ekleyerek her bir sayfayı Site.master ana sayfasıyla ilişkilendirdiğinizden emin olun:Next, add the following ASP.NET pages to that folder, making sure to associate each page with the Site.master master page:

  • Default.aspx
  • ObjectDataSource.aspx
  • FromTheArchitecture.aspx
  • AtApplicationStartup.aspx
  • SqlCacheDependencies.aspx

Önbelleğe alma ile Ilgili öğreticiler için ASP.NET sayfaları ekleyin

Şekil 1: önbelleğe alma Ile ilgili öğreticiler Için ASP.NET sayfaları eklemeFigure 1: Add the ASP.NET Pages for the Caching-Related Tutorials

Diğer klasörlerde olduğu gibi, Caching klasöründeki Default.aspx öğreticileri bölümündeki öğreticilerin listelecektir.Like in the other folders, Default.aspx in the Caching folder will list the tutorials in its section. SectionLevelTutorialListing.ascx Kullanıcı denetiminin bu işlevselliği sağladığını hatırlayın.Recall that the SectionLevelTutorialListing.ascx User Control provides this functionality. Bu nedenle, bu kullanıcı denetimini Çözüm Gezgini sayfa s Tasarım görünümü üzerine sürükleyerek Default.aspx ekleyin.Therefore, add this User Control to Default.aspx by dragging it from the Solution Explorer onto the page s Design view.

Şekil 2: SectionLevelTutorialListing. ascx Kullanıcı denetimini default. aspx 'e eklemeFigure 2: Add the SectionLevelTutorialListing.ascx User Control to Default.aspx

Şekil 2: Şekil 2: SectionLevelTutorialListing.ascx kullanıcı denetimini Default.aspx 'e ekleme (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 2: Figure 2: Add the SectionLevelTutorialListing.ascx User Control to Default.aspx (Click to view full-size image)

Son olarak, bu sayfaları Web.sitemap dosyasına girdi olarak ekleyin.Lastly, add these pages as entries to the Web.sitemap file. Özellikle, Ikili verilerle çalışmayı tamamladıktan sonra aşağıdaki biçimlendirmeyi ekleyin <siteMapNode>:Specifically, add the following markup after the Working with Binary Data <siteMapNode>:

<siteMapNode title="Caching" url="~/Caching/Default.aspx" 
    description="Learn how to use the caching features of ASP.NET 2.0.">
    <siteMapNode url="~/Caching/ObjectDataSource.aspx" 
        title="ObjectDataSource Caching" 
        description="Explore how to cache data directly from the 
            ObjectDataSource control." />
    <siteMapNode url="~/Caching/FromTheArchitecture.aspx" 
        title="Caching in the Architecture" 
        description="See how to cache data from within the 
            architecture." />
    <siteMapNode url="~/Caching/AtApplicationStartup.aspx" 
        title="Caching Data at Application Startup" 
        description="Learn how to cache expensive or infrequently-changing 
            queries at the start of the application." />
    <siteMapNode url="~/Caching/SqlCacheDependencies.aspx" 
        title="Using SQL Cache Dependencies" 
        description="Examine how to have data automatically expire from the 
            cache when its underlying database data is modified." />
</siteMapNode>

Web.sitemapgüncelleştirildikten sonra Öğreticiler Web sitesini bir tarayıcıdan görüntülemek için bir dakikanızı ayırın.After updating Web.sitemap, take a moment to view the tutorials website through a browser. Sol taraftaki menü artık önbelleğe alma öğreticilerinin öğelerini içerir.The menu on the left now includes items for the caching tutorials.

Site Haritası artık önbelleğe alma öğreticilerinin girdilerini Içerir

Şekil 3: site haritası artık önbelleğe alma öğreticilerinin girdilerini içerirFigure 3: The Site Map Now Includes Entries for the Caching Tutorials

2. Adım: bir Web sayfasında ürünlerin listesini görüntülemeStep 2: Displaying a List of Products in a Web Page

Bu öğreticide, ObjectDataSource denetimi yerleşik önbelleğe alma özelliklerinin nasıl kullanılacağı açıklanır.This tutorial explores how to use the ObjectDataSource control s built-in caching features. Bu özelliklere bakmadan önce, ilk olarak bir sayfanın çalışması gerekir.Before we can look at these features, though, we first need a page to work from. ProductsBLL sınıfından bir ObjectDataSource tarafından alınan ürün bilgilerini listelemek için GridView kullanan bir Web sayfası oluşturalım.Let s create a web page that uses a GridView to list product information retrieved by an ObjectDataSource from the ProductsBLL class.

Caching klasöründeki ObjectDataSource.aspx sayfasını açarak başlayın.Start by opening the ObjectDataSource.aspx page in the Caching folder. Araç kutusundan bir GridView 'u tasarımcı üzerine sürükleyin, ID özelliğini Productsolarak ayarlayın ve akıllı etiketinden, ProductsDataSourceadlı yeni bir ObjectDataSource denetimine bağlamayı seçin.Drag a GridView from the Toolbox onto the Designer, set its ID property to Products, and, from its smart tag, choose to bind it to a new ObjectDataSource control named ProductsDataSource. ObjectDataSource 'ı ProductsBLL sınıfıyla çalışacak şekilde yapılandırın.Configure the ObjectDataSource to work with the ProductsBLL class.

, ObjectDataSource 'ı ProductsBLL sınıfını kullanacak şekilde yapılandırmaConfigure the ObjectDataSource to Use the ProductsBLL Class

Şekil 4: ObjectDataSource 'ı ProductsBLL sınıfını kullanacak şekilde yapılandırma (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 4: Configure the ObjectDataSource to Use the ProductsBLL Class (Click to view full-size image)

Bu sayfa için, ObjectDataSource 'da önbelleğe alınan veriler GridView s arabirimi aracılığıyla değiştirildiğinde ne olduğunu inceleyebileceğiniz şekilde, s için düzenlenebilir bir GridView oluşturalım.For this page, let s create an editable GridView so that we can examine what happens when data cached in the ObjectDataSource is modified through the GridView s interface. Seç sekmesinde açılan listeyi varsayılan olarak ayarlayın, GetProducts(), ancak GÜNCELLEŞTIR sekmesindeki seçili öğeyi, giriş parametreleri olarak productName, unitPriceve productID kabul eden UpdateProduct aşırı yüklemeye değiştirin.Leave the drop-down list in the SELECT tab set to its default, GetProducts(), but change the selected item in the UPDATE tab to the UpdateProduct overload that accepts productName, unitPrice, and productID as its input parameters.

GÜNCELLEŞTIRME sekmesi açılan listesini uygun UpdateProduct aşırı yüküne ayarlaSet the UPDATE Tab s Drop-Down List to the Appropriate UpdateProduct Overload

Şekil 5: güncelleştirme sekmesi s açılan listesini uygun UpdateProduct aşırı yüklemeye ayarlayın (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 5: Set the UPDATE Tab s Drop-Down List to the Appropriate UpdateProduct Overload (Click to view full-size image)

Son olarak, INSERT ve DELETE sekmelerindeki açılan listeleri (yok) olarak ayarlayın ve son ' a tıklayın.Finally, set the drop-down lists in the INSERT and DELETE tabs to (None) and click Finish. Veri kaynağı Yapılandırma Sihirbazı 'nı tamamladıktan sonra Visual Studio, ObjectDataSource OldValuesParameterFormatString özelliğini original_{0}olarak ayarlar.Upon completing the Configure Data Source wizard, Visual Studio sets the ObjectDataSource s OldValuesParameterFormatString property to original_{0}. Veri öğreticisini ekleme, güncelleştirme ve silmeye genel bakış konusunda açıklandığı gibi, güncelleştirme iş akışınız hata olmadan devam edebilmesi için, bu özelliğin bildirime dayalı sözdiziminden kaldırılması veya varsayılan değerine ({0}) yeniden ayarlanması gerekir.As discussed in the An Overview of Inserting, Updating, and Deleting Data tutorial, this property needs to be removed from the declarative syntax or set back to its default value, {0}, in order for our update workflow to proceed without error.

Ayrıca, sihirbazın tamamlanması, her ürün veri alanı için GridView 'a bir alan ekler.Furthermore, at the completion of the wizard Visual Studio adds a field to the GridView for each of the product data fields. ProductName, CategoryNameve UnitPrice BoundFields hariç tümünü kaldırın.Remove all but the ProductName, CategoryName, and UnitPrice BoundFields. Ardından, bu BoundFields 'in her birinin HeaderText özelliklerini sırasıyla ürün, kategori ve fiyat olarak güncelleştirin.Next, update the HeaderText properties of each of these BoundFields to Product, Category, and Price, respectively. ProductName alanı gerekli olduğundan, BoundField öğesini TemplateField öğesine dönüştürün ve EditItemTemplatebir RequiredFieldValidator ekleyin.Since the ProductName field is required, convert the BoundField into a TemplateField and add a RequiredFieldValidator to the EditItemTemplate. Benzer şekilde, UnitPrice BoundField öğesini TemplateField 'a dönüştürün ve Kullanıcı tarafından girilen değerin sıfırdan büyük veya sıfıra eşit geçerli bir para birimi değeri olduğundan emin olmak için bir CompareValidator ekleyin.Similarly, convert the UnitPrice BoundField into a TemplateField and add a CompareValidator to ensure that the value entered by the user is a valid currency value that s greater than or equal to zero. Bu değişikliklere ek olarak, UnitPrice değerini sağa hizalamak veya UnitPrice metnin biçimlendirmesini salt okunurdur ve Düzenle arabirimlerinde belirtmek gibi herhangi bir Aesthetic Characteristics değişikliğini gerçekleştirmeye başlayabilirsiniz.In addition to these modifications, feel free to perform any aesthetic changes, such as right-aligning the UnitPrice value, or specifying the formatting for the UnitPrice text in its read-only and editing interfaces.

GridView s akıllı etiketinde düzenleme etkinleştir onay kutusunu işaretleyerek GridView 'ı düzenlenebilir hale getirin.Make the GridView editable by checking the Enable Editing checkbox in the GridView s smart tag. Ayrıca, Sayfalamayı Etkinleştir ve sıralamayı etkinleştir onay kutularını işaretleyin.Also check the Enable Paging and Enable Sorting checkboxes.

Note

GridView s Editing arabirimini nasıl özelleştireceğinizi gözden geçirmeniz gerekiyor mu?Need a review of how to customize the GridView s editing interface? Bu durumda, veri değiştirme arabirimi öğreticisini özelleştirmeye geri bakın.If so, refer back to the Customizing the Data Modification Interface tutorial.

Düzen, sıralama ve sayfalama için GridView desteğini etkinleştirmek Enable GridView Support for Editing, Sorting, and Paging

Şekil 6: düzen, sıralama ve sayfalama Için GridView desteğini etkinleştirin (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 6: Enable GridView Support for Editing, Sorting, and Paging (Click to view full-size image)

Bu GridView değişikliklerini yaptıktan sonra, GridView ve ObjectDataSource 'un bildirim temelli işaretlemesi aşağıdakine benzer olmalıdır:After making these GridView modifications, the GridView and ObjectDataSource s declarative markup should look similar to the following:

<asp:GridView ID="Products" runat="server" AutoGenerateColumns="False" 
    DataKeyNames="ProductID" DataSourceID="ProductsDataSource" 
    AllowPaging="True" AllowSorting="True">
    <Columns>
        <asp:CommandField ShowEditButton="True" />
        <asp:TemplateField HeaderText="Product" SortExpression="ProductName">
            <EditItemTemplate>
                <asp:TextBox ID="ProductName" runat="server" 
                    Text='<%# Bind("ProductName") %>'></asp:TextBox>
                <asp:RequiredFieldValidator 
                    ID="RequiredFieldValidator1" Display="Dynamic" 
                    ControlToValidate="ProductName" SetFocusOnError="True"
                    ErrorMessage="You must provide a name for the product."
                    runat="server">*</asp:RequiredFieldValidator>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label2" runat="server" 
                    Text='<%# Bind("ProductName") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="CategoryName" HeaderText="Category" 
            ReadOnly="True" SortExpression="CategoryName" />
        <asp:TemplateField HeaderText="Price" SortExpression="UnitPrice">
            <EditItemTemplate>
                $<asp:TextBox ID="UnitPrice" runat="server" Columns="8" 
                    Text='<%# Bind("UnitPrice", "{0:N2}") %>'></asp:TextBox>
                <asp:CompareValidator ID="CompareValidator1"
                    ControlToValidate="UnitPrice" Display="Dynamic" 
                    ErrorMessage="You must enter a valid currency value with no 
                        currency symbols. Also, the value must be greater than 
                        or equal to zero."
                    Operator="GreaterThanEqual" SetFocusOnError="True" 
                    Type="Currency" runat="server" 
                    ValueToCompare="0">*</asp:CompareValidator>
            </EditItemTemplate>
            <ItemStyle HorizontalAlign="Right" />
            <ItemTemplate>
                <asp:Label ID="Label1" runat="server" 
                    Text='<%# Bind("UnitPrice", "{0:c}") %>' />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
<asp:ObjectDataSource ID="ProductsDataSource" runat="server"
    OldValuesParameterFormatString="{0}" SelectMethod="GetProducts" 
    TypeName="ProductsBLL" UpdateMethod="UpdateProduct">
    <UpdateParameters>
        <asp:Parameter Name="productName" Type="String" />
        <asp:Parameter Name="unitPrice" Type="Decimal" />
        <asp:Parameter Name="productID" Type="Int32" />
    </UpdateParameters>
</asp:ObjectDataSource>

Şekil 7 ' de gösterildiği gibi, düzenlenebilir GridView veritabanındaki her bir ürünün adını, kategorisini ve fiyatını listeler.As Figure 7 shows, the editable GridView lists the name, category, and price of each of the products in the database. En kısa süre içinde sonuçları sıralayın, bu işlem içindeki sayfaları düzenleyin ve bir kaydı düzenleyin.Take a moment to test out the page s functionality sort the results, page through them, and edit a record.

Her ürün adı, kategori ve fiyat sıralanabilir, disk belleğine alınabilir, düzenlenebilir bir GridView 'da listelenmiştirEach Product s Name, Category, and Price is Listed in a Sortable, Pageable, Editable GridView

Şekil 7: her ürün adı, kategori ve fiyat sıralanabilir, disk belleğine alınan, düzenlenebilir bir GridView 'da listelenir (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 7: Each Product s Name, Category, and Price is Listed in a Sortable, Pageable, Editable GridView (Click to view full-size image)

3. Adım: ObjectDataSource 'un verileri ne zaman Istediğini IncelemeStep 3: Examining When the ObjectDataSource is Requesting Data

GridView Products, ProductsDataSource ObjectDataSource 'un Select yöntemini çağırarak verileri görüntülenecek şekilde alır.The Products GridView retrieves its data to display by invoking the Select method of the ProductsDataSource ObjectDataSource. Bu ObjectDataSource, Iş mantığı katmanı s ProductsBLL sınıfının bir örneğini oluşturur ve GetProducts() yöntemini çağırır ve bu da veri erişim katmanı s ProductsTableAdapter s GetProducts() yöntemini çağırır.This ObjectDataSource creates an instance of the Business Logic Layer s ProductsBLL class and calls its GetProducts() method, which in turn calls the Data Access Layer s ProductsTableAdapter s GetProducts() method. DAL yöntemi, Northwind veritabanına bağlanır ve yapılandırılmış SELECT sorgusunu yayınlar.The DAL method connects to the Northwind database and issues the configured SELECT query. Bu veriler daha sonra DAL olarak döndürülür ve bir NorthwindDataTable.This data is then returned to the DAL, which packages it up in a NorthwindDataTable. DataTable nesnesi BLL 'e döndürülür. Bu, bunu GridView 'a döndüren ObjectDataSource öğesine döndürür.The DataTable object is returned to the BLL, which returns it to the ObjectDataSource, which returns it to the GridView. GridView daha sonra DataTable 'daki her bir DataRow için bir GridViewRow nesnesi oluşturur ve her GridViewRow sonunda istemciye döndürülen ve ziyaretçi tarayıcısı üzerinde görüntülenen HTML 'de işlenir.The GridView then creates a GridViewRow object for each DataRow in the DataTable, and each GridViewRow is eventually rendered into the HTML that is returned to the client and displayed on the visitor s browser.

Bu olay dizisi her biri ve GridView 'un temel alınan verilerine bağlanması gereken her seferinde oluşur.This sequence of events happens each and every time the GridView needs to bind to its underlying data. Sayfa ilk kez ziyaret edildiğinde, bir veri sayfasından diğerine geçiş yaparken, GridView sıralandığında veya GridView s verilerini yerleşik düzenleme veya silme arabirimleri aracılığıyla değiştirirken meydana gelir.That happens when the page is first visited, when moving from one page of data to another, when sorting the GridView, or when modifying the GridView s data through its built-in editing or deleting interfaces. GridView s görünüm durumu devre dışıysa, GridView her bir ve her geri göndermede de yeniden bağlanacaktır.If the GridView s view state is disabled, the GridView will be rebound on each and every postback as well. GridView Ayrıca DataBind() yöntemi çağırarak verilerine açıkça yeniden bağlanabilir.The GridView can also be explicitly rebound to its data by calling its DataBind() method.

Verilerin veritabanından alındığı sıklığı tam olarak görmek için, verilerin ne zaman yeniden alındığını belirten bir ileti görüntülenmesini sağlayın.To fully appreciate the frequency with which the data is retrieved from the database, let s display a message indicating when the data is being re-retrieved. ODSEventsadlı GridView 'un üstüne bir etiket Web denetimi ekleyin.Add a Label Web control above the GridView named ODSEvents. Text özelliğini temizleyin ve EnableViewState özelliğini falseolarak ayarlayın.Clear out its Text property and set its EnableViewState property to false. Etiketin altına bir Button Web Control ekleyin ve Text özelliğini postback olarak ayarlayın.Underneath the Label, add a Button Web control and set its Text property to Postback .

GridView 'un üzerindeki sayfaya bir etiket ve düğme eklemek Add a Label and Button to the Page Above the GridView

Şekil 8: GridView 'un üzerindeki sayfaya bir etiket ve düğme ekleyin (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 8: Add a Label and Button to the Page Above the GridView (Click to view full-size image)

Veri erişimi iş akışı sırasında, ObjectDataSource Selecting olayı temel alınan nesne oluşturulmadan ve yapılandırılan Yöntem çağrılmadan önce ateşlenir.During the data access workflow, the ObjectDataSource s Selecting event fires before the underlying object is created and its configured method invoked. Bu olay için bir olay işleyicisi oluşturun ve aşağıdaki kodu ekleyin:Create an event handler for this event and add the following code:

protected void ProductsDataSource_Selecting(object sender, 
    ObjectDataSourceSelectingEventArgs e)
{
    ODSEvents.Text = "-- Selecting event fired";
}

ObjectDataSource her bir veri için mimariye bir istek yaptığında, etiket tetiklenen olayı seçen metin görüntülenir.Each time the ObjectDataSource makes a request to the architecture for data, the Label will display the text Selecting event fired .

Bu sayfayı bir tarayıcıda ziyaret edin.Visit this page in a browser. Sayfa ilk kez ziyaret edildiğinde, tetiklenen olayı seçen metin gösterilir.When the page is first visited, the text Selecting event fired is shown. Geri gönder düğmesine tıklayın ve metnin kaybolduğunu unutmayın (GridView s EnableViewState özelliğinin true, varsayılan) olarak ayarlandığı varsayılır.Click the Postback button and note that the text disappears (assuming that the GridView s EnableViewState property is set to true, the default). Bunun nedeni, geri göndermede GridView 'un görünüm durumundan yeniden yapılandırılmış olması ve bu nedenle verileri için ObjectDataSource 'e geri gönderilmesi.This is because, on postback, the GridView is reconstructed from its view state and therefore doesn t turn to the ObjectDataSource for its data. Ancak verileri sıralama, sayfalama veya düzenlemenin yanı sıra GridView 'un veri kaynağına yeniden bağlanmasına neden olur ve bu nedenle olay harekete geçen metin seçimi yeniden belirir.Sorting, paging, or editing the data, however, causes the GridView to rebind to its data source, and therefore the Selecting event fired text reappears.

GridView, veri kaynağına her bağlandığında tetiklenen olay seçildiğinde görüntülenirWhenever the GridView is Rebound to its Data Source, Selecting event fired is Displayed

Şekil 9: GridView 'un veri kaynağına yeniden bağlanması durumunda tetiklenen olayı seçme görüntülenir (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 9: Whenever the GridView is Rebound to its Data Source, Selecting event fired is Displayed (Click to view full-size image)

Geri gönderme düğmesine tıklamak GridView 'un görünüm durumundan yeniden oluşturulmasına neden olurClicking the Postback Button Causes the GridView to be Reconstructed from its View State

Şekil 10: geri gönderme düğmesine tıklamak GridView 'un görünüm durumundan yeniden oluşturulmasına neden olur (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 10: Clicking the Postback Button Causes the GridView to be Reconstructed from its View State (Click to view full-size image)

Verilerin her sayfalanışında veya sıralandığında veritabanı verilerinin alınması beklenebilir görünebilir.It may seem wasteful to retrieve the database data each time the data is paged through or sorted. Bu yana, varsayılan sayfalama 'yı kullanmaya başladıktan sonra, ilk sayfa görüntülenirken ObjectDataSource tüm kayıtları almıştır.After all, since we re using default paging, the ObjectDataSource has retrieved all of the records when displaying the first page. GridView sıralama ve sayfalama desteği sağlamasa bile, sayfa her kullanıcı tarafından ilk kez ziyaret edildiğinde (ve Görünüm durumu devre dışıysa her geri göndermede) verilerin veritabanından alınması gerekir.Even if the GridView does not provide sorting and paging support, the data must be retrieved from the database each time the page is first visited by any user (and on every postback, if view state is disabled). Ancak GridView tüm kullanıcılar için aynı verileri gösteriyorsa, bu ek veritabanı istekleri gereksiz olur.But if the GridView is showing the same data to all users, these extra database requests are superfluous. GetProducts() yönteminden döndürülen sonuçları önbelleğe alma ve GridView 'i bu önbelleğe alınmış sonuçlara bağlama.Why not cache the results returned from the GetProducts() method and bind the GridView to those cached results?

4. Adım: ObjectDataSource kullanarak verileri önbelleğe almaStep 4: Caching the Data Using the ObjectDataSource

Yalnızca birkaç özelliği ayarlayarak, ObjectDataSource, alınan verilerini ASP.NET veri önbelleğinde otomatik olarak önbelleğe almak üzere yapılandırılabilir.By simply setting a few properties, the ObjectDataSource can be configured to automatically cache its retrieved data in the ASP.NET data cache. Aşağıdaki liste, ObjectDataSource 'un önbellekte ilgili özelliklerini özetler:The following list summarizes the cache-related properties of the ObjectDataSource:

  • Önbelleğe almayı etkinleştirmek için EnableCaching 'nin true olarak ayarlanması gerekir.EnableCaching must be set to true to enable caching. Varsayılan, false değeridir.The default is false.
  • CacheDuration , verilerin önbelleğe alınma süresi (saniye cinsinden).CacheDuration the amount of time, in seconds, that the data is cached. Varsayılan değer, 0'dur.The default is 0. ObjectDataSource yalnızca EnableCaching true ve CacheDuration sıfırdan büyük bir değere ayarlandıysa verileri önbelleğe alacak.The ObjectDataSource will only cache data if EnableCaching is true and CacheDuration is set to a value greater than zero.
  • CacheExpirationPolicy , Absolute veya Slidingolarak ayarlanabilir.CacheExpirationPolicy can be set to Absolute or Sliding. Absolute, ObjectDataSource CacheDuration saniye boyunca alınan verilerini önbelleğe alır; Sliding, verilerin süresi yalnızca CacheDuration saniye boyunca erişilmedi.If Absolute, the ObjectDataSource caches its retrieved data for CacheDuration seconds; if Sliding, the data expires only after it has not been accessed for CacheDuration seconds. Varsayılan, Absolute değeridir.The default is Absolute.
  • CacheKeyDependency bu özelliği, ObjectDataSource s önbellek girişlerini varolan bir önbellek bağımlılığı ile ilişkilendirmek için kullanın.CacheKeyDependency use this property to associate the ObjectDataSource s cache entries with an existing cache dependency. ObjectDataSource 'un veri girişleri, ilişkili CacheKeyDependencysüresi dolduğunda önbellekten erken çıkartık olabilir.The ObjectDataSource s data entries can be prematurely evicted from the cache by expiring its associated CacheKeyDependency. Bu özellik en yaygın olarak SQL önbellek bağımlılıkları öğreticisini kullanarak keşfedediğimiz bir konu olan ObjectDataSource s Cache ile SQL önbellek bağımlılığını ilişkilendirmek için kullanılır.This property is most commonly used to associate a SQL cache dependency with the ObjectDataSource s cache, a topic we'll explore in the future Using SQL Cache Dependencies tutorial.

ProductsDataSource ObjectDataSource 'ı, verileri mutlak ölçekte 30 saniye önbellekte önbelleğe almak üzere yapılandıralım.Let s configure the ProductsDataSource ObjectDataSource to cache its data for 30 seconds on an absolute scale. ObjectDataSource EnableCaching özelliğini true ve CacheDuration özelliğini 30 olarak ayarlayın.Set the ObjectDataSource s EnableCaching property to true and its CacheDuration property to 30. CacheExpirationPolicy özelliğini varsayılan, Absoluteolarak bırakın.Leave the CacheExpirationPolicy property set to its default, Absolute.

, verileri 30 saniye önbellekte önbelleğe almak için yapılandırınConfigure the ObjectDataSource to Cache its Data for 30 Seconds

Şekil 11: ObjectDataSource 'ı verileri 30 saniye önbellekte önbelleğe almak üzere yapılandırın (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 11: Configure the ObjectDataSource to Cache its Data for 30 Seconds (Click to view full-size image)

Değişikliklerinizi kaydedin ve bu sayfayı bir tarayıcıda yeniden ziyaret edin.Save your changes and revisit this page in a browser. İlk olarak veri önbellekte olmadığında, sayfayı ilk kez ziyaret ettiğinizde başlatılan olay seçme metni görüntülenir.The Selecting event fired text will appear when you first visit the page, as initially the data is not in the cache. Ancak geri gönderme düğmesine tıklanarak, sıralama, sayfalama veya Düzenle ya da Iptal düğmelerini tıklatmak ile tetiklenen sonraki geri göndermeler, başlatılan olay harekete geçirilmiş metni yeniden görüntülemez .But subsequent postbacks triggered by clicking the Postback button, sorting, paging, or clicking the Edit or Cancel buttons does not redisplay the Selecting event fired text. Bunun nedeni, Selecting olayının yalnızca ObjectDataSource temel nesnesinden verileri aldığında harekete geçirilir; veriler veri önbelleğinden çekilmezse Selecting olay harekete geçmeyecektir.This is because the Selecting event only fires when the ObjectDataSource gets its data from its underlying object; the Selecting event does not fire if the data is pulled from the data cache.

30 saniye sonra, veriler önbellekten çıkarılacaktır.After 30 seconds, the data will be evicted from the cache. Insert, Updateveya Delete yöntemleri çağrılırsa, veriler önbellekten de çıkartılecektir.The data will also be evicted from the cache if the ObjectDataSource s Insert, Update, or Delete methods are invoked. Sonuç olarak, 30 saniye geçtikten sonra veya güncelleştirme düğmesine tıklandıktan sonra, sıralama, sayfalama veya Düzenle ya da Iptal düğmelerini tıklatmak, ObjectDataSource 'un verileri temel nesnesinden almasını sağlar ve bu da Selecting olay tetiklendiğinde çalıştırılan olayı Seçme metnini görüntüler.Consequently, after 30 seconds have passed or the Update button has been clicked, sorting, paging, or clicking the Edit or Cancel buttons will cause the ObjectDataSource to get its data from its underlying object, displaying the Selecting event fired text when the Selecting event fires. Döndürülen bu sonuçlar veri önbelleğine geri yerleştirilir.These returned results are placed back into the data cache.

Note

Çalışan olay harekete geçen metni sık sık görürseniz, ObjectDataSource 'un önbelleğe alınmış verilerle çalışmasını bekleseniz bile, bu durum Bellek kısıtlamalarından kaynaklanıyor olabilir.If you see the Selecting event fired text frequently, even when you expect the ObjectDataSource to be working with cached data, it may be due to memory constraints. Yeterli boş bellek yoksa, ObjectDataSource tarafından önbelleğe eklenen veriler de atılabilir.If there is not enough free memory, the data added to the cache by the ObjectDataSource may have been scavenged. ObjectDataSource, verileri doğru önbelleğe alma veya yalnızca verileri önbelleğe alma gibi görünmesine gerek yoksa belleği boşaltmak için bazı uygulamaları kapatın ve yeniden deneyin.If the ObjectDataSource doesn t appear to be correctly caching the data or only caches the data sporadically, close some applications to free memory and try again.

Şekil 12, ObjectDataSource 'un önbelleğe alma iş akışını gösterir.Figure 12 illustrates the ObjectDataSource s caching workflow. Ekranda seçme olayı harekete geçirildiğinde metin görüntülendiğinde, verilerin önbellekte olmaması ve temel alınan nesneden alınması gerekiyordu.When the Selecting event fired text appears on your screen, it is because the data was not in the cache and had to be retrieved from the underlying object. Ancak bu metin eksik olduğunda, veriler önbellekten kullanılabilir olduğundan,.When this text is missing, however, it s because the data was available from the cache. Veriler önbellekten döndürüldüğünde, temel alınan nesneye hiçbir çağrı yapılmaz ve bu nedenle veritabanı sorgusu yürütülmez.When the data is returned from the cache there s no call to the underlying object and, therefore, no database query executed.

ObjectDataSource verileri veri önbelleğinden depolar ve alır

Şekil 12: ObjectDataSource, verileri veri önbelleğinden depolar ve alırFigure 12: The ObjectDataSource Stores and Retrieves its Data from the Data Cache

Her bir ASP.NET uygulamasının, tüm sayfalar ve ziyaretçiler genelinde paylaştığı kendi veri önbelleği örneği vardır.Each ASP.NET application has its own data cache instance that s shared across all pages and visitors. Diğer bir deyişle, ObjectDataSource tarafından veri önbelleğinde depolanan veriler aynı şekilde sayfayı ziyaret eden tüm kullanıcılar arasında paylaşılır.That means that the data stored in the data cache by the ObjectDataSource is likewise shared across all users who visit the page. Bunu doğrulamak için ObjectDataSource.aspx sayfasını bir tarayıcıda açın.To verify this, open the ObjectDataSource.aspx page in a browser. Sayfa ilk kez ziyaret edildiğinde, başlatılan olayı seçme metni görüntülenir (önceki testlerin önbelleğine eklenen verilerin şu anda çıkarıldığını varsayarak).When first visiting the page, the Selecting event fired text will appear (assuming that the data added to the cache by previous tests has, by now, been evicted). İkinci bir tarayıcı örneği açın ve ilk tarayıcı örneğinden ikincisine URL 'YI kopyalayın ve yapıştırın.Open a second browser instance and copy and paste the URL from the first browser instance to the second. İkinci tarayıcı örneğinde, ilk olarak aynı önbelleğe alınmış verileri kullandığından, olay harekete geçen metin seçme metni gösterilmez.In the second browser instance, the Selecting event fired text is not shown because it s using the same cached data as the first.

Alınan veriler önbelleğe eklenirken, ObjectDataSource, CacheDuration ve CacheExpirationPolicy özellik değerlerini içeren bir önbellek anahtarı değeri kullanır; TypeName özelliği Ile belirtilen ObjectDataSource tarafından kullanılan temeldeki iş nesnesinin türü (ProductsBLL, bu örnekte); SelectMethod özelliğinin değeri ve SelectParameters koleksiyonundaki parametrelerin adı ve değerleri; ve StartRowIndex ve MaximumRows özelliklerinin, Özel sayfalama uygularken kullanılan değerleri.When inserting its retrieved data into the cache, the ObjectDataSource uses a cache key value that includes: the CacheDuration and CacheExpirationPolicy property values; the type of the underlying business object being used by the ObjectDataSource, which is specified via the TypeName property (ProductsBLL, in this example); the value of the SelectMethod property and the name and values of the parameters in the SelectParameters collection; and the values of its StartRowIndex and MaximumRows properties, which are used when implementing custom paging.

Bu özelliklerin bir birleşimi olarak önbellek anahtarı değerinin oluşturulması, bu değerler değiştikçe benzersiz bir önbellek girişi sağlar.Crafting the cache key value as a combination of these properties ensures a unique cache entry as these values change. Örneğin, geçmiş öğreticilerde, belirtilen bir kategori için tüm ürünleri döndüren ProductsBLL sınıf s GetProductsByCategoryID(categoryID)kullanmaya baktık.For example, in past tutorials we ve looked at using the ProductsBLL class s GetProductsByCategoryID(categoryID), which returns all products for a specified category. Tek bir kullanıcı sayfaya gelebilir ve 1 CategoryID olan meşruleri görüntüleyebilir.One user might come to the page and view beverages, which has a CategoryID of 1. ObjectDataSource, SelectParameters değerleri dikkate almadan sonuçlarını önbelleğe alıyorsa, içgörüler ürünleri önbellekte olduğu sürece, başka bir kullanıcı da sayfaya geldiğinde, büyük/küçük ürünler yerine önbelleğe alınmış içecek ürünlerini görürler.If the ObjectDataSource cached its results without regard for the SelectParameters values, when another user came to the page to view condiments while the beverages products were in the cache, they d see the cached beverage products rather than condiments. SelectParametersdeğerleri de dahil olmak üzere bu özelliklere göre önbellek anahtarını değiştirerek, ObjectDataSource, içecek ve koşullu kaynaklar için ayrı bir önbellek girişi tutar.By varying the cache key by these properties, which include the values of the SelectParameters, the ObjectDataSource maintains a separate cache entry for beverages and condiments.

Eski veri konularıStale Data Concerns

Insert, Updateveya Delete yöntemlerinin herhangi biri çağrıldığında, ObjectDataSource öğeleri önbellekten otomatik olarak çıkarır.The ObjectDataSource automatically evicts its items from the cache when any one of its Insert, Update, or Delete methods is invoked. Bu, veriler sayfa aracılığıyla değiştirildiğinde önbellek girişlerini temizleyerek eski verilere karşı korumaya yardımcı olur.This helps protect against stale data by clearing out the cache entries when the data is modified through the page. Ancak, önbelleğe alma kullanan bir ObjectDataSource, eski verileri görüntülemeye devam etmek için mümkündür.However, it is possible for an ObjectDataSource using caching to still display stale data. En basit durumda, bunun nedeni doğrudan veritabanı içinde değişen veri olabilir.In the simplest case, it can be due to the data changing directly within the database. Belki de bir veritabanı Yöneticisi veritabanındaki bazı kayıtları değiştiren bir betiği çalıştırdı.Perhaps a database administrator just ran a script that modifies some of the records in the database.

Bu senaryo, daha hafif bir şekilde katlamayı de kaldırır.This scenario could also unfold in a more subtle way. ObjectDataSource, veri değiştirme yöntemlerinden biri çağrıldığında öğeleri önbellekten çıkarlarken, kaldırılan önbelleğe alınmış öğeler, özellik değerlerinin (CacheDuration, TypeName, SelectMethodvb.) belirli bir birleşimine yöneliktir.While the ObjectDataSource evicts its items from the cache when one of its data modification methods is called, the cached items removed are for the ObjectDataSource s particular combination of property values (CacheDuration, TypeName, SelectMethod, and so on). Farklı SelectMethods veya SelectParameterskullanan, ancak yine de aynı verileri güncelleştirebilecek iki ObjectDataSources varsa, bir ObjectDataSource bir satırı güncelleştirebilir ve kendi önbellek girişlerini geçersiz kılabilir, ancak ikinci ObjectDataSource için karşılık gelen satır, hala önbelleğe alınmış olarak sunulur.If you have two ObjectDataSources that use different SelectMethods or SelectParameters, but still can update the same data, then one ObjectDataSource may update a row and invalidate its own cache entries, but the corresponding row for the second ObjectDataSource will still be served from the cached. Bu işlevi gösteren sayfalar oluşturmanızı teşvik ediyorum.I encourage you to create pages to exhibit this functionality. Verilerini önbelleğe alma kullanan bir ObjectDataSource 'tan alıp ProductsBLL sınıf s GetProducts() yönteminden veri almak üzere yapılandırılmış bir düzenlenebilir GridView görüntüleyen bir sayfa oluşturun.Create a page that displays an editable GridView that pulls its data from an ObjectDataSource that uses caching and is configured to get data from the ProductsBLL class s GetProducts() method. Bu sayfaya (veya başka bir tane) başka bir düzenlenebilir GridView ve ObjectDataSource ekleyin, ancak bu ikinci ObjectDataSource için GetProductsByCategoryID(categoryID) yöntemini kullanın.Add another editable GridView and ObjectDataSource to this page (or another one), but for this second ObjectDataSource have it use the GetProductsByCategoryID(categoryID) method. İki ObjectDataSources SelectMethod özellikleri farklı olduğundan, bunların her biri kendi önbelleğe alınmış değerlerine sahiptir.Since the two ObjectDataSources SelectMethod properties differ, they ll each have their own cached values. Bir ürünü tek bir kılavuzda düzenlerseniz, daha sonra verileri diğer kılavuza geri bağladığınızda (sayfalama, sıralama vb.), yine de eski, önbelleğe alınmış verilere sahip olur ve diğer kılavuzdan yapılan değişikliği yansıtmaz.If you edit a product in one grid, the next time you bind the data back to the other grid (by paging, sorting, and so forth), it will still serve the old, cached data and not reflect the change that was made from the other grid.

Kısacası, yalnızca eski verilerin potansiyelini sağlamak istiyorsanız zaman tabanlı expiries kullanın ve verilerin yeniliği önemli olan senaryolar için daha kısa expiries kullanın.In short, only use time-based expiries if you are willing to have the potential of stale data, and use shorter expiries for scenarios where the freshness of data is important. Eski veriler kabul edilebilir değilse, ya da SQL önbellek bağımlılıklarını kullanın veya (yeniden önbelleğe aldığınız veritabanı verileri olduğu varsayılarak).If stale data is not acceptable, either forgo caching or use SQL cache dependencies (assuming it is database data you re caching). Gelecek bir öğreticide SQL önbellek bağımlılıklarını araştıracağız.We'll explore SQL cache dependencies in a future tutorial.

ÖzetSummary

Bu öğreticide, ObjectDataSource 'ın yerleşik önbelleğe alma yeteneklerini inceliyoruz.In this tutorial we examined the ObjectDataSource s built-in caching capabilities. Yalnızca birkaç özelliği ayarlayarak, ObjectDataSource 'a belirtilen SelectMethod döndürülen sonuçları ASP.NET veri önbelleğine önbelleğe almak için talimat vereceğiz.By simply setting a few properties, we can instruct the ObjectDataSource to cache the results returned from the specified SelectMethod into the ASP.NET data cache. CacheDuration ve CacheExpirationPolicy özellikleri, öğenin önbelleğe alındığı süreyi ve mutlak veya kayan bir süre sonu olup olmadığını gösterir.The CacheDuration and CacheExpirationPolicy properties indicate the duration the item is cached and whether it is an absolute or sliding expiration. CacheKeyDependency özelliği, tüm ObjectDataSource 'lar önbellek girdilerini varolan bir önbellek bağımlılığı ile ilişkilendirir.The CacheKeyDependency property associates all of the ObjectDataSource s cache entries with an existing cache dependency. Bu, zaman tabanlı süre sonuna ulaşılmadan önce ObjectDataSource 'un girişlerini önbellekten çıkarmak için kullanılabilir ve genellikle SQL önbellek bağımlılıklarıyla birlikte kullanılır.This can be used to evict the ObjectDataSource s entries from the cache before the time-based expiration is reached, and is typically used with SQL cache dependencies.

ObjectDataSource, değerlerini veri önbelleğine yalnızca önbelleğe aldığından, ObjectDataSource 'ın yerleşik işlevselliğini programlı bir şekilde çoğaltabiliriz.Since the ObjectDataSource simply caches its values to the data cache, we could replicate the ObjectDataSource s built-in functionality programmatically. Bu, ObjectDataSource bu işlevselliği kutudan çıkar, ancak bir mimarinin ayrı bir katmanında önbelleğe alma özelliği uygulayabiliriz.It doesn t make sense to do this at the Presentation Layer, since the ObjectDataSource offers this functionality out of the box, but we can implement caching capabilities in a separate layer of the architecture. Bunu yapmak için, ObjectDataSource tarafından kullanılan mantığı tekrarlamanız gerekecektir.To do so, we'll need to repeat the same logic used by the ObjectDataSource. Sonraki öğreticimizde mimarideki veri önbelleğiyle programlı olarak nasıl çalışacağımız anlatılmaktadır.We'll explore how to programmatically work with the data cache from within the architecture in our next tutorial.

Programlamanın kutlu olsun!Happy Programming!

Daha Fazla BilgiFurther Reading

Bu öğreticide ele alınan konular hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın:For more information on the topics discussed in this tutorial, refer to the following resources:

Yazar hakkındaAbout the Author

4GuysFromRolla.com 'in, Scott Mitchell, yedi ASP/ASP. net books ve 'in yazarı, 1998 sürümünden bu yana Microsoft Web teknolojileriyle çalışmaktadır.Scott Mitchell, author of seven ASP/ASP.NET books and founder of 4GuysFromRolla.com, has been working with Microsoft Web technologies since 1998. Scott bağımsız danışman, Trainer ve yazıcı olarak çalışıyor.Scott works as an independent consultant, trainer, and writer. En son kitabı, 24 saat içinde ASP.NET 2,0 kendi kendinize eğitimister.His latest book is Sams Teach Yourself ASP.NET 2.0 in 24 Hours. mitchell@4GuysFromRolla.comadresinden erişilebilir .He can be reached at mitchell@4GuysFromRolla.com. ya da blog aracılığıyla http://ScottOnWriting.NETbulabilirsiniz.or via his blog, which can be found at http://ScottOnWriting.NET.

Özel olarak teşekkürlerSpecial Thanks To

Bu öğretici serisi birçok yararlı gözden geçirenler tarafından incelendi.This tutorial series was reviewed by many helpful reviewers. Bu öğretici için müşteri adayı gözden geçireni bir Murphy idi.Lead reviewer for this tutorial was Teresa Murphy. Yaklaşan MSDN makalelerimi gözden geçiriyor musunuz?Interested in reviewing my upcoming MSDN articles? Öyleyse, benimitchell@4GuysFromRolla.combir satır bırakın .If so, drop me a line at mitchell@4GuysFromRolla.com.