2010年2月8日 星期一

ASP.NET 4.0 New Feature : Extensible Output Caching (ASP.NET 4.0 新功能之延伸快取)

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);
}

沒有留言: