使用 ObjectDataSource 快取資料 (VB)

作者 :Scott Mitchell

下載 PDF

快取可能表示緩慢和快速 Web 應用程式之間的差異。 本教學課程是 4 個中第一個,其會詳細說明 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 快取相依性

不論指定的收回準則為何,快取中的專案都可以在符合以時間為基礎的準則或相依性準則之前 進行清除 。 如果快取已達到其容量,必須先移除現有的專案,才能新增新的專案。 因此,以程式設計方式使用快取數據時,請務必一律假設快取的數據可能不存在。 We'll look at the pattern to use when accessing data from the cache programmatically in our next tutorial, Caching Data in the Architecture.

快取提供經濟的方法,可從應用程式擷取更多效能。 如 Smith 所表達的文章 ASP.NET 快取:技術和最佳做法

快取是取得足夠效能的好方法,而不需要大量時間和分析。 記憶體的成本很便宜,因此,如果您可以快取輸出 30 秒,而不是花費一天或一周嘗試優化程式代碼或資料庫,請執行快取解決方案 (假設 30 秒的舊數據沒問題,) 並繼續進行。 最後,設計不佳可能會趕上您,因此您當然應該嘗試正確設計應用程式。 但是,如果您只需要立即取得足夠的效能,快取可能是絕佳的 [方法],您可以在稍後有時間時購買重構應用程式的時間。

雖然快取可以提供可辨別的效能增強功能,但不適用於所有情況,例如使用即時、經常更新數據的應用程式,或甚至短期過時數據無法接受的情況。 但對於大部分的應用程式,應該使用快取。 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:建立快取網頁

在開始探索 ObjectDataSource 快取功能之前,讓我們先花一點時間在網站專案中建立 ASP.NET 頁面,我們將需要本教學課程和下三個。 首先,新增名為 Caching的新資料夾。 接下來,將下列 ASP.NET 頁面新增至該資料夾,請務必讓每個頁面與主版頁面產生 Site.master 關聯:

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

為 Caching-Related 教學課程新增 ASP.NET 頁面

圖 1:為 Caching-Related 教學課程新增 ASP.NET 頁面

就像在其他資料夾中一樣, Default.aspx 資料夾中 Caching 的 將會列出其區段中的教學課程。 回想一下, 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 類別擷取的產品資訊。

從開啟 ObjectDataSource.aspx 資料夾中的頁面 Caching 開始。 將 GridView 從 [工具箱] 拖曳到 Designer、將其屬性設定為 Products,並從其智慧標記中選擇將它ID系結至名為 ProductsDataSource的新 ObjectDataSource 控件。 設定 ObjectDataSource 以使用 ProductsBLL 類別。

將 ObjectDataSource 設定為使用 ProductsBLL 類別

圖 4:將 ObjectDataSource 設定為使用 ProductsBLL 類別 (按兩下即可檢視完整大小的影像)

針對此頁面,讓我們建立可編輯的 GridView,以便我們可以檢查透過 GridView 介面修改 ObjectDataSource 中的數據時會發生什麼情況。 將 SELECT 索引標籤中的下拉式清單保留為預設值, GetProducts()但將 [更新] 索引標籤中的選取專案變更為 UpdateProduct 接受 productNameunitPriceproductID 做為其輸入參數的多載。

將 UPDATE 索引標籤 Drop-Down 清單設定為適當的 UpdateProduct 多載

圖 5:將 [更新] 索引標籤 Drop-Down 列表設定為適當的 UpdateProduct 多載 (按兩下即可檢視完整大小的映像)

最後,將 [INSERT] 和 [刪除] 索引標籤中的下拉式清單設定為 [無]) (,然後按兩下 [完成]。 完成 [設定數據源精靈] 之後,Visual Studio 會將 ObjectDataSource s OldValuesParameterFormatString 屬性設定為 original_{0}。 如同 插入、更新和刪除數據 教學課程的概觀中所述,此屬性必須從宣告式語法中移除,或設定回其預設值 , {0}才能讓更新工作流程繼續而不發生錯誤。

此外,在精靈完成時,Visual Studio 會為每個產品數據欄位新增一個字段至 GridView。 拿掉、 CategoryNameUnitPrice BoundFields 的所有ProductName專案。 接下來,分別將 HeaderText 每個 BoundFields 的屬性更新為 Product、Category 和 Price。 ProductName由於需要欄位,請將 BoundField 轉換成 TemplateField,並將 RequiredFieldValidator 新增至 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 何時要求數據

Products GridView 會叫Select用 ObjectDataSource 的 ProductsDataSource 方法來擷取要顯示的數據。 這個 ObjectDataSource 會建立 Business Logic Layer 類別的 ProductsBLL 實例,並呼叫其 GetProducts() 方法,接著會呼叫數據存取層 s ProductsTableAdapterGetProducts() 方法。 DAL 方法會連線到 Northwind 資料庫,併發出已設定 SELECT 的查詢。 然後,此數據會傳回 DAL,其會將它封裝在 中 NorthwindDataTable。 DataTable 物件會傳回至 BLL,它會將它傳回至 ObjectDataSource,它會將它傳回至 GridView。 GridView 接著會針對 DataRow DataTable 中的每個 建立GridViewRow對象,最後會GridViewRow轉譯成傳回給用戶端並在訪客瀏覽器上顯示的 HTML。

每次 GridView 需要系結至其基礎數據時,都會發生這個事件序列。 當第一次瀏覽頁面、從某個數據頁面移至另一個頁面、排序 GridView 時,或透過其內建編輯或刪除介面修改 GridView 數據時,就會發生這種情況。 如果 GridView 的檢視狀態已停用,GridView 也會在每個和每個回傳上重新系結。 GridView 也可以藉由呼叫其 DataBind() 方法,明確地重新系結至其數據。

為了充分瞭解從資料庫擷取數據的頻率,讓我們顯示一則訊息,指出何時要重新擷取數據。 在名為 ODSEvents的 GridView 上方新增標籤 Web 控件。 清除其 Text 屬性,並將其 屬性設定 EnableViewStateFalse。 在 [卷標] 底下,新增 Button Web 控件,並將其 Text 屬性設定為回傳 。

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

圖 8:將標籤和按鈕新增至 GridView 上方的頁面, (按兩下即可檢視大小完整的影像)

在數據存取工作流程期間,ObjectDataSource s Selecting 事件會在建立基礎物件並叫用其已設定的方法之前引發。 建立此事件的事件處理程式,並新增下列程序代碼:

Protected Sub ProductsDataSource_Selecting(sender As Object, _
    e As ObjectDataSourceSelectingEventArgs) _
    Handles ProductsDataSource.Selecting
    ODSEvents.Text = "-- Selecting event fired"
End Sub

每次 ObjectDataSource 對數據架構提出要求時,標籤會顯示 [選取] 事件引發的文字。

在瀏覽器中瀏覽此頁面。 第一次瀏覽頁面時,會顯示 [選取] 事件引發的文字。 按兩下 [回傳] 按鈕,並注意文字會消失 (假設 GridView 的 EnableViewState 屬性設定 True為 ,則為預設) 。 這是因為在回傳時,GridView 會從其檢視狀態重新建構,因此不會針對其數據轉換成 ObjectDataSource。 不過,排序、分頁或編輯數據會導致 GridView 重新系結至其數據源,因此 Select 事件引發的文字會重新出現。

每當 GridView 重新繫結至其數據源時,就會顯示引發 Select 事件

圖 9:每當 GridView 重新系結至其數據源時,就會引發 Select 事件 (按兩下即可檢視大小完整的影像)

按兩下 [回傳] 按鈕會導致 GridView 從其檢視狀態重新建構

圖 10:按兩下 [回傳] 按鈕會導致 GridView 從檢視狀態重新建構 (按兩下即可檢視大小完整的影像)

每次分頁或排序數據時,擷取資料庫數據似乎很浪費。 之後,由於我們使用的是默認分頁,因此當顯示第一頁時,ObjectDataSource 已擷取所有記錄。 即使 GridView 不提供排序和分頁支援,每次 (使用者第一次瀏覽頁面時,都必須從資料庫擷取數據,並在每次回傳時,如果檢視狀態停用) 。 但是,如果 GridView 向所有用戶顯示相同的數據,這些額外的資料庫要求就非常多。 為什麼不要快取從 GetProducts() 方法傳回的結果,並將 GridView 系結至那些快取的結果?

步驟 4:使用 ObjectDataSource 快取數據

只要設定幾個屬性,就可以將 ObjectDataSource 設定為在 ASP.NET 數據快取中自動快取其擷取的數據。 下列清單摘要說明 ObjectDataSource 的快取相關屬性:

  • EnableCaching 必須設定為 True ,才能啟用快取。 預設值為 False
  • CacheDuration 快取數據的時間量,以秒為單位。 預設值是 0。 如果 EnableCachingTrueCacheDuration 設定為大於零的值,ObjectDataSource 只會快取數據。
  • CacheExpirationPolicy 可以設定為 AbsoluteSliding。 如果 Absolute為 ,則 ObjectDataSource 會快取其擷取的數據幾秒鐘 CacheDuration ;如果 Sliding為 ,則只有在數據尚未存取數 CacheDuration 秒後才會過期。 預設值為 Absolute
  • CacheKeyDependency 會使用這個屬性,將 ObjectDataSource 的快取專案與現有的快取相依性產生關聯。 ObjectDataSource 的數據項可以藉由過期其相關聯的 CacheKeyDependency來提前從快取收回。 此屬性最常用來建立 SQL 快取相依性與 ObjectDataSource 快取快取的關聯,我們將在未來 使用 SQL 快取相依性 教學課程中探索的主題。

讓我們設定 ProductsDataSource ObjectDataSource,以在絕對刻度上快取其數據 30 秒。 將 ObjectDataSource 的 EnableCaching 屬性設定為 True ,並將其 CacheDuration 屬性設定為 30。 CacheExpirationPolicy將 屬性設定為預設的 Absolute

將 ObjectDataSource 設定為快取其數據 30 秒

圖 11:將 ObjectDataSource 設定為快取其數據 30 秒, (按兩下即可檢視大小完整的映像)

儲存您的變更,並在瀏覽器中重新瀏覽此頁面。 當您第一次瀏覽頁面時,就會顯示 Select 事件引發的文字,因為數據一開始不在快取中。 但是,按兩下 [回傳] 按鈕、排序、分頁或按兩下 [編輯] 或 [取消] 按鈕所觸發的後續回傳 不會 重新顯示 Select 事件引發的文字。 這是因為只有在 Selecting ObjectDataSource 從其基礎物件取得其數據時才會引發事件; Selecting 如果數據是從數據快取提取,則不會引發事件。

30 秒之後,數據將會從快取收回。 如果叫用 ObjectDataSource s InsertUpdateDelete 方法,也會從快取收回數據。 因此,經過 30 秒之後,或已按兩下 [更新] 按鈕、排序、分頁,或按兩下 [編輯] 或 [取消] 按鈕,會導致 ObjectDataSource 從其基礎物件取得其數據,在事件引發時 Selecting 顯示 Select 事件引發的文字。 這些傳回的結果會放在數據快取中。

注意

如果您經常看到 Select 事件引發的文字,即使您預期 ObjectDataSource 使用快取的數據,也可能是因為記憶體限制。 如果記憶體不足,ObjectDataSource 所新增至快取的數據可能已經清除。 如果 ObjectDataSource 似乎未正確快取數據,或只偶爾快取數據,請關閉某些應用程式以釋放記憶體,然後再試一次。

圖 12 說明 ObjectDataSource 的快取工作流程。 當選取事件引發的文字出現在畫面上時,這是因為數據不在快取中,而且必須從基礎物件擷取。 不過,遺失此文字時,這是因為數據可從快取取得。 當數據從快取傳回時,不會呼叫基礎物件,因此不會執行任何資料庫查詢。

ObjectDataSource 會儲存並擷取數據快取中的數據

圖 12:ObjectDataSource 會儲存並從數據快取中擷取其數據

每個 ASP.NET 應用程式都有自己的數據快取實例,這些實例會跨所有頁面和訪客共用。 這表示 ObjectDataSource 儲存在數據快取中的數據同樣會在瀏覽頁面的所有使用者之間共用。 若要確認這一點,請在 ObjectDataSource.aspx 瀏覽器中開啟頁面。 第一次瀏覽頁面時,選取事件引發的文字會出現 (假設先前測試新增至快取的數據現在已收回) 。 開啟第二個瀏覽器實例,並將URL從第一個瀏覽器實例複製並貼到第二個瀏覽器實例。 在第二個瀏覽器實例中,不會顯示 Select 事件引發的文字,因為它使用與第一個快取的數據相同。

將擷取的數據插入快取快取中時,ObjectDataSource 會使用快取索引鍵值,包括: CacheDurationCacheExpirationPolicy 屬性值;ObjectDataSource 所使用的基礎商務物件類型,這個範例會透過 TypeName 屬性 (指定,在此範例中為) ProductsBLLSelectMethod;屬性的值以及集合中SelectParameters參數的名稱和值,以及其 StartRowIndexMaximumRows 屬性的值, 實作自訂分頁時所使用的 。

製作快取索引鍵值做為這些屬性的組合,可確保這些值變更時的唯一快取專案。 例如,在過去教學課程中,我們已使用 類別 ProductsBLL s GetProductsByCategoryID(categoryID)來查看 ,這會傳回指定類別的所有產品。 其中一位使用者可能會前往頁面並檢視有1個 CategoryID 的訂用帳戶。 如果 ObjectDataSource 快取其結果而不考慮 SelectParameters 這些值,當另一位使用者前往頁面以在快取產品位於快取中時檢視串連,他們就會看到快取的咖啡產品,而不是串連。 藉由這些屬性來變更快取索引鍵,其中包括的值 SelectParameters,ObjectDataSource 會針對異動和串連維護個別的快取專案。

過時的數據考慮

當叫用任何一個、 UpdateDelete 方法時,ObjectDataSource 會自動從快取收回其Insert專案。 這有助於在透過頁面修改數據時清除快取專案,以防止過時的數據。 不過,您可以使用快取來顯示過時數據的 ObjectDataSource。 在最簡單的情況下,這可能是因為數據直接在資料庫內變更。 或許資料庫管理員剛執行腳本來修改資料庫中的某些記錄。

此案例也可以以更細微的方式展開。 當呼叫其中一個數據修改方法時,ObjectDataSource 會從快取收回其專案,但移除的快取專案會針對 ObjectDataSource 的特定屬性值組合, (CacheDurationTypeNameSelectMethod等等) 。 如果您有兩個使用不同 SelectMethods 或 的 SelectParametersObjectDataSource,但仍可以更新相同的數據,則一個 ObjectDataSource 可能會更新一個數據列,並使它自己的快取專案失效,但第二個 ObjectDataSource 的對應數據列仍會從快取中提供。 我們鼓勵您建立頁面來展示這項功能。 建立頁面,以顯示可編輯的 GridView,以從使用快取的 ObjectDataSource 提取其數據,並設定為從 ProductsBLL 類別 s 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 是 1998 年以來,1998 年與 Microsoft Web 技術合作的 篇 ASP/ASP.NET 書籍和 4GuysFromRolla.com 作者。 Scott 是獨立的顧問、訓練者和作者。 他的最新書籍是 Sams 在 24 小時內自行 ASP.NET 2.0。 您可以透過mitchell@4GuysFromRolla.com部落格連到,也可以透過其部落格來存取,網址為 http://ScottOnWriting.NET

特別感謝

本教學課程系列是由許多實用的檢閱者所檢閱。 本教學課程的首席檢閱者是 Teresa Murphy。 想要檢閱即將推出的 MSDN 文章嗎? 如果是,請將一行放在 mitchell@4GuysFromRolla.com。