.net中支援的兩種依賴:
ache
|
表示對於檔案或目錄的依賴
|
|
絕對過期時間 |
.
|
優先權 : CacheItemPriority |
刪除通知 |
當被快取的資料從記憶中移除的時候,可以提供一個通知機制,來回呼使用者定義的方法,方法必須符合CacheRemoallbackItemRemoback的方法。 。
|
2,不能在頁面上使用實例方法來作為回呼方法,當擋在頁面上使用回調方法時,由於指向回調方法時,由於指向回調方法的方法引用會阻止垃圾回收機制,因此會造成記憶體很快就耗光。
3,一般透過在自訂類別的靜態方法實現回呼方法,或使用頁面物件的靜態方法來實現。 二,基於檔案的快取範例
先在測試頁上加label::接合著
<asp:Label Text="" runat="server" id="label1"/>
這裡,區別下cache的Add方法和Insert方法:
在呼叫Add的時候,如果要加入的快取項目存在的話,則會呼叫失敗;但是如果用insert插入,則新插入的valueue值會覆寫原來的value值。
在webform1中,加入一行測試下:
<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>5s後我們刷新下:
但是多次測試我們會發現,刷新後出現過期的準確時間並不是5s,同時驗證了
回調的時機是不可預知的。
以上就是.net快取-基於檔案的快取的內容,更多相關內容請關注PHP中文網(www.php.cn)!