共用方式為


使用 ObjectDataSource 快取資料 (C#)

作者:Scott Mitchell

下載 PDF

快取可能意味著 Web 應用程式的速度較慢和較快。 本教學是詳細介紹 ASP.NET 中的快取的四個教學中的第一個。 了解快取的關鍵概念以及如何透過 ObjectDataSource 控制項將快取套用到表示層。

簡介

在電腦科學中,快取是獲取獲取成本昂貴的資料或資訊並將其副本儲存在存取速度更快的位置的過程。 對於資料驅動的應用程序,大型且複雜的查詢通常會消耗應用程式的大部分執行時間。 因此,通常可以透過將昂貴的資料庫查詢結果儲存在應用程式的記憶體中來提高此類別應用程式的效能。

ASP.NET 2.0 提供了多種快取選項。 整個網頁或使用者控制項呈現的標記可以透過輸出快取進行快取。 ObjectDataSource 和SqlDataSource 控制項還提供快取功能,從而允許在控制項層級快取資料。 ASP.NET 的資料快取提供了豐富的快取 API,使頁面開發人員能夠以程式設計方式快取物件。 在本教學和接下來的三個教學中,我們將研究如何使用 ObjectDataSource 的快取功能以及資料快取。 我們還將探討如何在啟動時快取應用程式範圍的資料,以及如何透過使用 SQL 快取依賴項來保持快取資料最新。 這些教學課程不探討輸出快取。 有關輸出快取的詳細信息,請參閱 ASP.NET 2.0 中的輸出快取

快取可以應用於架構中的任何位置,從資料存取層到表示層。 在本教學中,我們將了解如何透過 ObjectDataSource 控制項將快取套用到表示層。 在下一個教學中,我們將研究業務邏輯層的快取資料。

關鍵快取概念

快取可以透過取得產生成本高昂的資料並將其副本儲存在可以更有效地存取的位置來大幅提高應用程式的整體效能和可擴展性。 由於快取僅保存實際基礎資料的副本,因此如果基礎資料發生更改,它可能會過時或過時。 為了解決這個問題,頁面開發人員可以使用以下任一方法來指定從快取中逐出快取項目的標準:

  • 基於時間的標準可以將項目新增至快取中的絕對持續時間或滑動持續時間。 例如,頁面開發人員可能會指定 60 秒的持續時間。 對於絕對持續時間,快取項目在新增至快取後 60 秒將被逐出,無論存取頻率為何。 透過滑動持續時間,快取的項目將在上次造訪後 60 秒被逐出。
  • 基於依賴關係的標準,依賴關係可以在新增到快取時與項目關聯。 當專案的依賴關係發生變化時,它將從快取中逐出。 依賴項可以是檔案、另一個快取項目或兩者的組合。 ASP.NET 2.0 還允許 SQL 快取依賴項,這使開發人員能夠將專案新增至快取中,並在底層資料庫資料變更時將其逐出。 我們將在即將發布的使用 SQL 快取相依性教學中檢查 SQL 快取相依性。

無論指定的逐出標準為何,都可以在滿足基於時間或基於依賴性的標準之前清除高速快取中的項目。 如果快取已達到其容量,則必須先刪除現有項目,然後才能新增項目。 因此,當以程式設計方式處理快取資料時,始終假設快取資料可能不存在至關重要。 在下一個教學「在架構中快取資料」中,我們將了解以程式設計方式從快取存取資料時所使用的模式。

快取提供了一種經濟的方式來提高應用程式的效能。 正如 Steven Smith 在他的文章 ASP.NET 快取:技術和最佳做法中闡述的那樣:

快取是獲得足夠好的效能而不需要大量時間和分析的好方法。 記憶體很便宜,因此如果您可以透過快取30 秒的輸出來獲得所需的效能,而不是花費一天或一周的時間來嘗試優化程式碼或資料庫,請執行快取解決方案 (假設30 秒的舊資料是可以的) 並繼續前進。 最終,糟糕的設計可能會困擾你,所以你當然應該嘗試正確設計你的應用程式。 但是,如果您今天只需要獲得足夠好的效能,那麼快取可能是一種很好的方法,它可以為您贏得時間在以後有時間時重構您的應用程式。

雖然快取可以提供顯著的效能增強,但它並不適用於所有情況,例如使用即時、頻繁更新資料的應用程序,或即使是短暫的陳舊資料也是不可接受的。 但對於大多數應用程式來說,應該使用快取。 有關 ASP.NET 2.0 中快取的更多背景信息,請參閱 ASP.NET 2.0 快速入門教學課程的快取效能部分。

第 1 步:建立快取網頁

在開始探索 ObjectDataSource 的快取功能之前,我們先花點時間在我們的網站專案中建立 ASP.NET 頁面,本教學和接下來的三個教學將需要這些頁面。 首先新增一個名為 Caching 的新資料夾。 接下來,將以下 ASP.NET 頁面新增至該資料夾,確保將每個頁面與 Site.master 母版頁相關聯:

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

為快取相關教學新增 ASP.NET 頁面

圖 1:為快取相關教學新增 ASP.NET 頁面

與其他資料夾一樣,Caching 資料夾將在 Default.aspx 其部分列出教學課程。 回想一下,SectionLevelTutorialListing.ascx 使用者控制項提供了此功能。 因此,透過將此使用者控制項 Default.aspx 從解決方案資源管理器拖曳到頁面的設計檢視來新增。

圖 2:將SectionLevelTutorialListing.ascx 使用者控制項加入Default.aspx

圖 2:圖 2:SectionLevelTutorialListing.ascx新增使用者控制項Default.aspx (點選查看大圖)

最後,將這些頁面作為條目新增至 Web.sitemap 文件。 具體來說,在使用二進位資料之後添加以下標記:<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.sitemap 後,花點時間透過瀏覽器查看教學網站。 左側的選單現在包含快取教學課程的項目。

網站地圖現在包含快取教學課程的條目

圖 3:網站地圖現在包含快取教學的條目

步驟 2:在網頁中顯示產品列表

本教學課程探討如何使用 ObjectDataSource 控制項的內建快取功能。 不過,在查看這些功能之前,我們首先需要一個可以使用的頁面。 讓我們建立一個網頁,該網頁使用 GridView 列出由 ObjectDataSource 從 ProductsBLL 類別中擷取到的產品資訊。

首先打開 Caching 資料夾中的 ObjectDataSource.aspx 頁面。 將 GridView 從工具箱拖曳到設計器上,將 ID 屬性設為 Products,然後從其智慧標記中選擇將其綁定到名為 ProductsDataSource 的新 ObjectDataSource 控制項。 設定 ObjectDataSource 以與 ProductsBLL 類別一起使用。

設定 ObjectDataSource 以使用 ProductsBLL 類別

圖 4:設定 ObjectDataSource 以使用 ProductsBLL 類別 (按一下查看全尺寸影像)

對於此頁面,讓我們建立一個可編輯的 GridView,以便我們可以檢查透過 GridView 的介面修改 ObjectDataSource 中快取的資料時會發生什麼。 將 SELECT 標籤中的下拉清單保留為其預設設定 GetProducts()UpdateProduct,但將 UPDATE 標籤中的所選項目變更為接受 productNameunitPriceproductID 作為其輸入參數的重載。

將 UPDATE 標籤的下拉清單設定為適當的 UpdateProduct 重載

圖 5:將 UPDATE 標籤的下拉清單設定為適當的 UpdateProduct 重載 (按一下查看全尺寸影像)

最後,將「插入」和「刪除」標籤中的下拉清單設為 (無),然後按一下「完成」。 完成「設定資料來源」精靈後,Visual Studio 將 ObjectDataSource OldValuesParameterFormatString 屬性設為 original_{0}如同插入、更新和刪除資料概述教學課程中所述,需要從聲明性語法中刪除此屬性或設定回其預設值 ,以便我們的更新工作流程能夠順利進行。{0}

此外,精靈完成後,Visual Studio 會在 GridView 中為每個產品資料欄位新增一個欄位。 刪除 ProductNameCategoryNameUnitPrice BoundField 之外的所有內容。 接下來,將每個 BoundField 的 HeaderText 屬性分別更新為 Product、Category 和 Price。 由於 ProductName 欄位是必需的,因此將 BoundField 轉換為 TemplateField 並向 EditItemTemplate 同樣,將 UnitPrice BoundField 轉換為 TemplateField 並新增 CompareValidator 以確保使用者輸入的值是大於或等於零的有效貨幣值。 除了這些修改之外,您還可以隨意執行任何美觀的更改,例如右對齊 UnitPrice 值,或在唯讀和編輯介面中指定 UnitPrice 文字的格式。

透過選取 GridView 智慧標記中的啟用編輯複選框,使 GridView 可編輯。 另請勾選「啟用分頁」和「啟用排序」複選框。

注意

需要了解如何自訂 GridView 的編輯介面? 如果是這樣,請返回自訂資料修改介面教學。

啟用 GridView 對編輯、排序和分頁的支持

圖 6:啟用 GridView 對編輯、排序和分頁的支援 (按一下查看全尺寸影像)

進行這些 GridView 修改後,GridView 和 ObjectDataSource 的宣告性標記應類似下列內容:

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

如圖 7 所示,可編輯的 GridView 列出了資料庫中每個產品的名稱、類別和價格。 花點時間測試頁面的功能,將結果排序、翻頁以及編輯記錄。

每個產品的名稱、類別和價格都列在可排序、可分頁、可編輯的 GridView 中

圖 7:每個產品的名稱、類別和價格都列在可排序、可分頁、可編輯的 GridView 中 (點擊可查看全尺寸影像)

步驟 3:檢查 ObjectDataSource 何時請求資料

ProductsGridView 透過呼叫 ProductsDataSourceObjectDataSourceSelect 的方法來擷取要顯示的資料。 此 ObjectDataSource 建立業務邏輯層 ProductsBLL 類別的實例並呼叫 GetProducts() 方法,該方法又呼叫 ProductsTableAdapter 資料存取層的 GetProducts() 方法。 DAL 方法連接到 Northwind 資料庫並發出設定的 SELECT 查詢。 然後,該資料返回 DAL,DAL 將其打包在 NorthwindDataTable DataTable 物件傳回 BLL,BLL 將其傳回 ObjectDataSource,ObjectDataSource 將其傳回 GridView。 然後,GridView 為 DataTable 中的 DataRow 每個物件建立一個 GridViewRow 物件,並且每個物件最終都會呈現為 HTML,GridViewRow HTML 返回到用戶端並顯示在訪客的瀏覽器上。

每次 GridView 需要綁定到其基礎資料時,都會發生此事件序列。 當第一次存取頁面時、從一頁資料移動到另一頁資料、對 GridView 進行排序或透過其內建編輯或刪除介面修改 GridView 資料時,都會發生這種情況。 如果 GridView 的檢視狀態被停用,則 GridView 也會在每次回發時反彈。 GridView 還可以透過呼叫 DataBind() 方法明確地反彈到其資料。

為了充分了解從資料庫擷取資料的頻率,讓我們顯示一則訊息,指示何時重新擷取資料。 在名為 ODSEvents 的 GridView 上方新增一個標籤 Web 控制項。 清除 Text 屬性並將 EnableViewState 屬性設為 false。 在 Label 下面,新增一個 Button Web 控制項並將其 Text 屬性設為 Postback 。

將標籤和按鈕新增到 GridView 上方的頁面

圖 8:在 GridView 上方的頁面新增標籤和按鈕 (按一下查看全尺寸影像)

在資料存取工作流程期間,ObjectDataSource Selecting 事件在建立基礎物件並呼叫其設定方法之前觸發。 為此事件建立一個事件處理程序並新增以下程式碼:

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

每次 ObjectDataSource 向體系結構發出資料請求時,Label 將顯示文字 Selecting eventfired 。

在瀏覽器中造訪此頁面。 首次造訪該頁面時,會顯示「已觸發選擇事件」文字。 按一下「Postback」按鈕,請注意文字消失了 (假設 GridView 的 EnableViewState 屬性設定為 true 預設值)。 這是因為,在回發時,GridView 是從其檢視狀態重建的,因此不會轉向 ObjectDataSource 取得其資料。 但是,對資料進行排序、分頁或編輯會導致 GridView 重新綁定到其資料來源,因此 Selecting 事件觸發的文字會重新出現。

每當 GridView 重新綁定到其資料來源時,都會顯示觸發的選擇事件

圖 9:每當 GridView 重新綁定到其資料來源時,都會顯示觸發的選擇事件 (按一下查看全尺寸影像)

點擊回發按鈕會導致 GridView 從其檢視狀態重建

圖 10:點選回發按鈕會導致 GridView 從其檢視狀態重建 (點擊查看全尺寸影像)

每次對資料進行分頁或排序時擷取資料庫資料似乎很浪費。 畢竟,由於我們使用預設分頁,ObjectDataSource 在顯示第一頁時已擷取所有記錄。 即使 GridView 不提供排序和分頁支持,每次任何使用者首次造訪該頁面時 (如果停用檢視狀態,則在每次回發時) 都必須從資料庫擷取資料。 但如果 GridView 向所有使用者顯示相同的資料,這些額外的資料庫請求就是多餘的。 為什麼不快取從 GetProducts() 方法返回的結果並將 GridView 綁定到這些快取的結果?

步驟 4:使用 ObjectDataSource 快取資料

透過簡單地設定一些屬性,ObjectDataSource 可以設定為自動將其擷取到的資料快取在 ASP.NET 資料快取中。 以下列表總結了 ObjectDataSource 的與快取相關的屬性:

  • 必須將 EnableCaching 設定為 true 啟用快取。 預設值為 false
  • CacheDuration 快取資料的時間量 (以秒為單位)。 預設值是 0。 ObjectDataSource 僅在 EnableCachingtrue 設定為大於零的值時 CacheDuration 才會快取資料。
  • CacheExpirationPolicy 可以設定為 AbsoluteSliding。 如果 Absolute,則 ObjectDataSource 將其擷取到的資料快取幾秒鐘 CacheDuration;如果 Sliding,則資料僅在 CacheDuration 數秒內沒有被存取後才會過期。 預設值為 Absolute
  • CacheKeyDependency 使用此屬性將 ObjectDataSource 的快取條目與現有快取相依性關聯。 ObjectDataSource 的資料條目可以透過使其關聯的過期而提前從快取中逐出 CacheKeyDependency。 此屬性最常用於將 SQL 快取相依性與 ObjectDataSource 的快取關聯起來,我們將在以後的使用 SQL 快取相依性教學中探討這個主題。

讓我們將 ProductsDataSourceObjectDataSource 設定為以絕對規模快取其資料 30 秒。 將 ObjectDataSource 的 EnableCaching 屬性設為 true 並將 CacheDuration 屬性設為 30。 將 CacheExpirationPolicy 屬性設為其預設值 Absolute

設定 ObjectDataSource 將其資料快取 30 秒

圖 11:設定 ObjectDataSource 將其資料快取 30 秒 (按一下查看大圖)

儲存變更並在瀏覽器中重新造訪此頁面。 當您第一次訪問該頁面時,將顯示選擇事件觸發的文本,因為最初資料不在快取中。 但是,透過點擊「回發」按鈕、排序、分頁或點擊「編輯」或「取消」按鈕觸發的後續回發不會重新顯示「選擇」事件觸發的文字。 這是因為 Selecting 事件僅在 ObjectDataSource 從其底層物件取得資料時觸發;如果從資料快取中提取資料,則不會觸發 Selecting 事件。

30 秒後,資料將從快取中清除。 如果呼叫 ObjectDataSource InsertUpdateDelete 或方法,資料也將從快取中逐出。 因此,經過30 秒或點擊更新按鈕後,排序、分頁或點擊編輯或取消按鈕將導致ObjectDataSource 從其基礎物件獲取資料,並在事件觸發時顯示選擇 Selecting 事件觸發文本。 這些傳回的結果被放回資料快取中。

注意

如果您看到 Selecting 事件經常觸發文本,即使您希望 ObjectDataSource 使用快取資料,也可能是由於記憶體限制。 如果沒有足夠的可用記憶體,則由 ObjectDataSource 新增至快取的資料可能已清除。 如果 ObjectDataSource 似乎未正確快取資料或僅偶爾快取資料,請關閉一些應用程式以釋放記憶體,然後再試一次。

圖 12 說明了 ObjectDataSource 的快取工作流程。 當選擇事件觸發文字出現在螢幕上時,這是因為資料不在快取中,必須從底層物件中擷取。 然而,當此文字遺失時,這是因為資料可從快取中取得。 當資料從快取返回時,不會呼叫底層物件,因此不會執行資料庫查詢。

ObjectDataSource 從資料快取中儲存和擷取其資料

圖 12:ObjectDataSource 在資料快取中儲存和擷取其資料

每個 ASP.NET 應用程式都有自己的資料快取實例,該實例在所有頁面和訪客之間共用。 這意味著 ObjectDataSource 儲存在資料快取中的資料同樣在存取該頁面的所有使用者之間共用。 若要驗證這一點,請在瀏覽器中開啟 ObjectDataSource.aspx 頁面。 首次造訪該頁面時,將出現 Selecting 事件觸發文字 (假設透過先前測試新增至快取的資料現在已被逐出)。 開啟第二個瀏覽器實例,然後將 URL 從第一個瀏覽器實例複製並貼上到第二個瀏覽器實例。 在第二個瀏覽器實例中,不會顯示選擇事件觸發的文本,因為它使用與第一個瀏覽器相同的快取資料。

將擷取到的資料插入快取時,ObjectDataSource 使用快取鍵值,其中包括:CacheDurationCacheExpirationPolicy TypeName 屬性值; ObjectDataSource 使用的基礎業務物件的類別型,透過屬性指定 (在本例中 ProductsBLL);屬性的值以及集合中參數的名稱和值;以及其 SelectMethodSelectParameters 屬性的值,StartRowIndex 這些值在 MaximumRows 實作自訂分頁時使用

將快取鍵值設計為這些屬性的組合可確保在這些值變更時獲得唯一的快取條目。 例如,在過去的教學課程中,我們使用了 ProductsBLL 類別,GetProductsByCategoryID(categoryID) 會傳回指定類別的所有產品。 一位使用者可能會造訪該頁面並查看飲料,該頁面的值為 CategoryID/1。 如果 ObjectDataSource 快取其結果而不考慮 SelectParameters 值,則當另一個使用者來到頁面查看調味品而飲料產品位於快取中時,他們會看到快取的飲料產品而不是調味品。 透過透過這些屬性 (包括 SelectParameters 的值)來改變快取鍵,ObjectDataSource 為飲料和調味品維護一個單獨的快取條目。

過時資料問題

當呼叫 ObjectDataSource 的 InsertUpdateDelete 方法之一時,ObjectDataSource 會自動從快取中逐出其項目。 當透過頁面修改資料時,這有助於透過清除快取條目來防止資料過時。 但是,使用快取的 ObjectDataSource 仍可能顯示陳舊資料。 在最簡單的情況下,這可能是由於資料庫內的資料直接變更所致。 也許資料庫管理員只是執行了一個修改資料庫中某些記錄的指令碼。

這種情況也可能以更微妙的方式展開。 雖然當呼叫其資料修改方法之一時,ObjectDataSource 會從快取中逐出其項目,但刪除的快取項目是針對 ObjectDataSource 的屬性值的特定組合(CacheDurationTypeNameSelectMethod 等)。 如果您有兩個使用不同的 SelectMethodsSelectParameters 的 ObjectDataSource,但仍然可以更新相同的資料,則一個 ObjectDataSource 可能會更新一行並使自己的快取條目無效,但第二個 ObjectDataSource 的相應行仍將從快取中提供。 我鼓勵您建立頁面來展示此功能。 建立一個顯示可編輯 GridView 的頁面,該 GridView 從使用快取的 ObjectDataSource 中提取資料,並設定為從 ProductsBLL 類別的 GetProducts() 方法獲取資料。 將另一個可編輯的 GridView 和 ObjectDataSource 新增至此頁面 (或另一個頁面),但對於第二個 ObjectDataSource,請使用 GetProductsByCategoryID(categoryID) 方法。 由於兩個 ObjectDataSources SelectMethod 屬性不同,因此它們每個都有自己的快取值。 如果您在一個網格中編輯產品,下次將資料綁定回另一個網格 (透過分頁、排序等) 時,它仍將提供舊的快取資料,並且不會反映從另一個網格。

簡而言之,只有在您願意接受過時資料的情況下才使用基於時間的過期時間,而對於資料新鮮度很重要的情況則使用較短的過期時間。 如果過時的資料不可接受,請放棄快取或使用 SQL 快取依賴項 (假設您正在快取的是資料庫資料)。 我們將在以後的教學課程中探討 SQL 快取依賴關係。

摘要

在本教學課程中,我們研究了 ObjectDataSource 的內建快取功能。 透過簡單地設定一些屬性,我們可以指示 ObjectDataSource 將從指定傳回的結果快取到SelectMethod ASP.NET資料快取。 CacheDurationCacheExpirationPolicy 屬性指示快取項目的持續時間以及是絕對過期還是滑動過期。 CacheKeyDependency 屬性將所有 ObjectDataSource 的快取條目與現有的快取相依性關聯。 這可用於在達到基於時間的到期之前從快取中逐出 ObjectDataSource 條目,並且通常與 SQL 快取依賴項一起使用。

由於 ObjectDataSource 只是將其值快取到資料快取中,因此我們可以透過程式設計方式複製 ObjectDataSource 的內建功能。 在表示層執行此操作沒有意義,因為 ObjectDataSource 提供了開箱即用的此功能,但我們可以在架構的單獨層中實現快取功能。 為此,我們需要重複 ObjectDataSource 使用的相同邏輯。 在下一個教學中,我們將探討如何在架構內以程式設計方式使用資料快取。

快樂程式!

深入閱讀

有關本教學課程中討論的主題的更多信息,請參閱以下資源:

關於作者

Scott Mitchell 是七本 ASP/ASP.NET 書籍的作者和 4GuysFromRolla.com 的創始人,自 1998 年以來一直致力於 Microsoft Web 技術。 史考特是一名獨立顧問、培訓師和作家。 他的最新著作是 Sams Teach Yourself ASP.NET 2.0 in 24 Hours。 您可以撥打 mitchell@4GuysFromRolla.com 聯絡他。或者透過他的部落格, http://ScottOnWriting.NET部落格可以在以下位置找到。

特別感謝

本教學系列得到了許多有用的審閱者的審閱。 本教學的首席審閱者是 Teresa Murphy。 有興趣查看我即將發表的 MSDN 文章嗎? 如果是這樣,請留言給我 mitchell@4GuysFromRolla.com