.net緩衝——基於檔案的緩衝

來源:互聯網
上載者:User

一,.Net中的緩衝基礎知識

.net中支援的兩種依賴:


CacheDependency

SqlDependency

表示對於檔案或者目錄的依賴

表示對於SQL資料庫的依賴

到期時間


絕對到期時間

滑動到期時間

一個特定的時間點,類型為DateTime

一個時間間隔,類型為TimeSpan


優先順序 : CacheItemPriority

由於我們需要緩衝大量的資料,在記憶體有限的情況下,就必須對緩衝的資料進行優先順序分類,以便在需要的時候,將不重要的資料從緩衝中移除。優先順序用來指定快取資料的重要性,重要的資料可以更長時間地儲存在記憶體中。

刪除通知

當被緩衝的資料從記憶體中移除的時候,可以提供一個通知機制,來回調使用者定義的方法,方法必須符合CacheItemRemovedCallback委託的定義。。

特別注意:

1,回調的時機是不可預知的,不能假定回調發生時,回調方法的執行線程存在HttpContext的上下文,為了在沒有請求內容相關的時候取得對Cache對象的引用,可以通過HttpRuntime的cache屬性來使用應用程式的cache.

2,不能在頁面上使用執行個體方法來作為回調方法,擋在頁面上使用回調方法時,由於指向回調方法的引用會阻止記憶體回收機制,因此會造成記憶體很快耗光。

3,一般通過在自訂類的靜態方法實現回調方法,或者使用頁面對象的靜態方法實現。

二,基於檔案的緩衝樣本

首先在測試頁面上加個label:

  <asp:Label Text="" runat="server" id="label1"/>

接著,加入緩衝管理類:

<span style="font-size:14px;">namespace 基於檔案的緩衝依賴{    public class CacheManager    {        public static string Message {            get {                HttpContext context = HttpContext.Current;                //首先從緩衝中擷取                string message = context.Cache["Message"] as string;                //如果緩衝中沒有資料                if (message==null)                {                    string path = context.Server.MapPath("TestFileCache.txt");                    message = System.IO.File.ReadAllText(path);                    //將資訊儲存到緩衝中,設定響應的到期時間為1分鐘                    context.Cache.Add(                        "Message",                        message,                        new System.Web.Caching.CacheDependency(path),//依賴於檔案或者目錄的依賴                        System.Web.Caching.Cache.NoAbsoluteExpiration,//不使用絕對到期時間                        new TimeSpan(0, 0, 5),//緩衝的時間                        System.Web.Caching.CacheItemPriority.Normal, //緩衝的優先順序                        Callback); //到期時的回調                                    }                return message;            }                }        /// <summary>        /// Callbacks the specified key.        /// </summary>        /// <param name="key">The key.</param>        /// <param name="value">The value.</param>        /// <param name="reason">The reason.</param>        /// <remarks>Editor:v-liuhch CreateTime:2015/5/26 20:13:22</remarks>        private static void Callback(                        string key,            Object value,            System.Web.Caching.CacheItemRemovedReason reason            //原因            ) {                if (reason == System.Web.Caching.CacheItemRemovedReason.Expired)                {                   HttpRuntime.Cache.Insert("Message","時間已到,緩衝已到期");                                    }                }                           }}</span>

這裡,區別下cache的Add方法和Insert方法:

在調用Add的時候,如果要加入的快取項目存在的話,則會調用失敗;但是如果用insert插入,則新插入的value值會覆蓋掉原來的value值。

在webform1中,加入一行測試下:

 protected void Page_Load(object sender, EventArgs e)        {                this.label1.Text = CacheManager.Message;   //擷取緩衝        }

可以看到已經讀到檔案中的內容了,因為設定的是5s後到期,所以5s後我們重新整理下:

但是多次測試我們會發現,重新整理後出現到期的準確時間並不是5s,同時驗證了回調的時機是不可預知的。

以上就是.net緩衝——基於檔案的緩衝的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.