ASP.NET Cache 方案

來源:互聯網
上載者:User

ASP.NET 網站應用程式程式是無狀態的,用戶端每執行一次 PostBack 動作,所有的對象都需要重建立立;當然這樣的執行模式相當沒有效率,所以在 ASP.NET 應用程式中有 Application、Session、Cache 這三類資料暫存區。Application 的生命週期與應用程式相同,Session 的生命週期與個別使用者相同,而 Cache 的生命週期則由程式設計師自訂,Cache 相對於 Application 及 Session 來說顯示更有彈性。
選擇合適的 Cache 方案能有效提升網站的執行效能,設定 Cache 到期的條件可分為下列三種。
1.絕對時間:插入對象到期並從快取移除的時間。
2.浮動時間:上次存取插入對象的時間與該對象到期的時間之間隔。如果這個數值等於二十分鐘,那麼對象將會在最後存取的二十分鐘後到期並從快取中移除。
3.檔案相依:項目的檔案或快取索引鍵相依性。例如,假設您根據 XML 檔案中的資料建立 DataSet 對象,您可以將 DataSet 加入含有 CacheDependency 對象的快取,該對象使 DataSet 相依於此 XML 檔案。如果 XML 檔案變更,則會從快取中移除 DataSet。
筆者常使用 Cache 來暫存經常存取的設定資料,一般作法是根據 XML 檔案建立「設定類別」,這個類別再放入 Cache,並設定快取到期條件為「浮動時間+XML 檔案相依」。這樣的快取方案有二個優點。
1.該對象存取的頻率愈多,則會優先置於 Cache,不易從 Cache 被移除。
2.當設定的 XML 檔案內容變更時,Cache 則會被移除,以保持最新資料。
 
這個快取方案的演算法如下
Step1:要求對象。
Step2:檢查 Cache 中是否有該對象。
Step3:若 Cache 中有該對象,則取得對象跳離程式。反之則執行 Step4。
Step4:由 XML 檔案建立對象,並存入 Cache,並傳回該物件。
 
假設 TMySetting 對象要使用上述的快取方案,程式碼實作如下。程式碼中處理還原序列化的 TBSerializerUtil.XmlFileToObject 方法 ,請參閱「物件序列化函式庫」一文。

 

    ''' <summary>
    ''' 依索引值取得 TMySetting 對象。
    ''' </summary>
    ''' <param name="Key">索引值。</param>
    Public Function GetMySetting(ByVal Key As String) As TMySeting
        Dim sCacheKey As String
        Dim oCache As System.Web.Caching.Cache
        Dim oMySeting As TMySeting
        Dim sFileName As String

        '快取索引值為「型別名稱.索引值」
        sCacheKey = String.Format("{0}.{1}", GetType(TMySeting).Name, Key)

        'ASP.NET 快取物件
        oCache = System.Web.HttpContext.Current.Cache

        If oCache(sCacheKey) IsNot Nothing Then
            '直接由 Cache 取得該對象
            oMySeting = CType(oCache(sCacheKey), TMySeting)
        Else
            '由 XML 檔案建立對象
            sFileName = "對象對應的檔案名稱"
            oMySeting = CType(TBSerializerUtil.XmlFileToObject(sFileName, GetType(TMySeting)), TMySeting)

            '將對象存入 Cache,並設定快取移除時機
            '1.檔案相依
            '2.浮動時間為 5 分鐘
            oCache.Insert(sCacheKey, oMySeting, _
                          New System.Web.Caching.CacheDependency(sFileName), _
                          System.Web.Caching.Cache.NoAbsoluteExpiration, New TimeSpan(0, 5, 0))
        End If
        Return oMySeting
    End Function

 

後記:
在 EnterpriseLibrary 中也有處理快取的 CacheManager 對象,它類似 ASP.NET 的 Cache 物件。若是撰寫三層式架構,也可以使用 EnterpriseLibrary 的 CacheManager 來取代 ASP.NET Cache,往後有時間再來介紹 EnterpriseLibrary 的 CacheManager 對象。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.