一,.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)!