ASP.NET 具備快取功能,可以將網頁、控制項或是HTTP responses資料快取起來記錄在記憶體,但是目前預設的ASP.NET快取功能所提供主要是儲存在Server的記憶體中,如果對非常龐大的存取流量來說,記憶體的耗費基本上是非常可觀的。ASP.NET 4.0的output caching功能提供開發者可以自訂output-cache providers,以儲存快取資料在不同的地方,而不單純只是在Server上的記憶體。
例如,開發者可以先開發一個客製化自訂的output-cache providers,命名為:DiskOutputCacheProvider來套用,建立一個class,這個類別可以繼承System.Web.Caching.OutputCacheProvider,然後改寫class其中的儲存方式,例如存到硬碟。設計完成之後,可以設定ASP.NET 4.0的web.config以改變網站的快取模式。
web.config設定如下:
<caching>
<outputCache defaultProvider="AspNetInternalProvider">
<providers>
<add name="DiskCache"
type="MyLib.OutputCacheEx.DiskOutputCacheProvider, DiskCacheProvider"/>
</providers>
</outputCache>
</caching>
以上的web.config設定表示ASP.NET 4.0預設的output-cache providers仍然是套用預設的AspNetInternalProvider,也就是直接儲存網站的記憶體中,但是我們新增了一個自訂的output-cache providers在這個網站中。
接著某一個網頁、使用者控制項…等等,想要套用自訂的output-cache providers的話,就只要設定網頁的OutputCache 指示詞去套用即可,如下列設定代表快取30秒,並且快取的資料式儲存在硬碟中:
<%@ OutputCache Duration="30" VaryByParam="None" providerName="DiskCache" %>
當然,除了直接在某一個網頁設定OutputCache 指示詞,讓網頁去套用自訂的快取模式之外,還可以在整個網站的Global.asax中改寫GetOutputCacheProviderName事件程序,去指定整個網站中的哪些網頁或資源想要套用客製化的output caching功能,程式設計如下:
public override string GetOutputCacheProviderName(HttpContext context)
{
if (context.Request.Path.EndsWith("MyDemo.aspx"))
return "DiskCache";
else
return base.GetOutputCacheProviderName(context);
}
沒有留言:
張貼留言