緩沖功能是開發人員構建ASP.NET 2.0 Web應用程序的重要關注點之一。本文試圖通過三個示例頁面全面剖析ASP.NET 2.0提供的新的緩沖機制。
一、簡介
ASP.NET 1.x Cache API是一種革命性特征。當一個XML文件或另一個緩沖項的內容改變時,Cache API提供了諸如聲明性輸出緩沖、以編程方式控制輸出緩沖以及使緩沖項無效等能力。盡管這大大改進了Web應用程序的性能,但遺憾的是,ASP.NET 1.x並沒有提供一種機制來實現當數據庫中的數據改變時使一個緩存對象中的數據無效。最終,在ASP.NET 2.0中加入了這一特征。此外,ASP.NET 2.0還提供了特定功能用於緩沖一個SqlDataSource控件的輸出—你可以充分利用緩沖優點而不用編寫一行代碼。本文中,讓我們共同討論這些新的緩沖特征,以及如何把它們應用於自己的Web應用程序。
在ASP.NET 2.0中,緩沖以多種方式加以改進。也許最引人矚目的改進是引入了數據庫觸發的緩存無效機制。在ASP.NET 1.x中,你能夠基於一些預定義條件(例如一個XML文件中的改變,在另一個緩存項中的改變等)來使一個緩沖項無效。借助於這一特征,當數據或另一個緩沖項改變時,你可以刪除或從緩存中使該項無效。然而,當一個SQL Server數據庫中的數據改變時,ASP.NET 1.x Cache API並不允許你使緩存中的一個項成為無效的,盡管大多數應用程序都要求具有這種能力。相比之下,ASP.NET 2.0則特別重視這一點—通過提供數據庫觸發的緩存無效功能,它使你確保緩存中的項與數據庫中的改變保持同步更新。
ASP.NET 2.0另一個重要的緩沖特征是能夠在SqlDataSource級上支持緩沖。該SqlDataSource控件能夠操作SQL Server、OLEDB、ODBC和Oracle數據庫等多種數據庫,而且支持你使用SQL命令選擇、更新、刪除和插入數據。現在,借助於在SqlDataSource控件級上設置緩沖屬性的能力,你可以更為細致地控制緩沖的數據。
ASP.NET 2.0還提供一個新的Substitution控件,你能夠使用它來把動態的內容注入到另一個緩沖的Web頁面中。如果你有一個啟動了輸出緩沖功能的頁面但是仍然想顯示動態的內容(這需要在每次請求該頁面時重新生成)的話,那麼你可以考慮使用該Substitution控件。
下列幾節中,我將詳細分析上面的特征並提供相關的示例。
【提示】本文中提供了三個簡單但完整的aspx頁面源碼,我使用Visual Studio 2005在一個簡單web工程Caching中分別試驗,並用浏覽器預覽這三個頁面。至於如何建立工程與SQL Server 2005/2000/7.0示例數據庫Northwind的連接,在此略過。
二、在SqlDataSource控件中實現基於時間的緩存無效
ASP.NET緩沖是一種能夠改進Web應用程序性能的重要特征。事實上,改進一個數據庫驅動的Web應用程序性能的最顯著的方法正體現在對緩沖機制的巧妙把握上。在絕大多數情況下,從數據庫中檢索數據成為你能夠實現的最慢的網站操作之一。然而,如果你能夠在內存中恰當地緩存數據庫數據並且盡可能在每一次頁面請求時避免訪問數據庫,那麼你一定能夠顯著地改進你的應用程序的性能。
ASP.NET 2.0提供了比ASP.NET 1.x更強的緩沖特征。其中,一個新的特征是,它能夠把caching屬性指定為數據源控件聲明的一部分。ASP.NET 2.0中的這個新的數據源控件能夠“無縫”地利用ASP.NET 2.0新的緩沖特征特征,從而使你能夠把caching屬性設置為SqlDataSource控件聲明的一部分。
典型地,你可以通過設置SqlDataSource控件中的下列兩個屬性來支持緩沖:
◆EnableCaching—通過把這個屬性設置為true,你可以啟動一個SqlDataSource控件的緩沖功能。
◆CacheDuration—這個屬性允許你設置或得到SqlDataSource控件中的緩沖數據的持續時間(這個屬性以秒為單位指定)。