亚洲成精品动漫久久精久,九九在线精品视频播放,黄色成人免费观看,三级成人影院,久碰久,四虎成人欧美精品在永久在线

掃一掃
關注微信公眾號

ASP.NET緩存:方法分析和實踐示例(3)
2008-04-22   中國IT實驗室

CacheItemRemovedCallback 示例

System.Web.Caching.CacheItemRemovedCallback callback = new System.Web.
Caching.CacheItemRemovedCallback (OnRemove);

Cache.Insert("key",myFile,null, System.Web.Caching.Cache.NoAbsoluteExpiration,
TimeSpan.Zero, System.Web.Caching.CacheItemPriority.Default, callback);
. . .
public static void OnRemove(string key, object cacheItem, System.Web.Caching.
CacheItemRemovedReason reason)

  {

AppendLog("The cached value with key '" + key + "' was removed from the cache.
Reason: " +
reason.ToString());

  }

  該示例將使用 AppendLog() 方法(這里不討論該方法,請參閱 Writing Entries to Event Logs)中定義的任何邏輯來記錄緩存中的數據到期的原因。通過在從緩存中刪除項時記錄這些項并記錄刪除的原因,您可以確定是否在有效地使用緩存或者您是否可能需要增加服務器上的內存。注意,callback 是一個靜態(在 VB 中為 Shared)方法,建議使用該方法的原因是,如果不使用它,保存回調函數的類的實例將保留在內存中,以支持回調(對 static/Shared 方法則沒有必要)。

  該特性有一個潛在的用處 — 在后臺刷新緩存的數據,這樣用戶永遠都不必等待數據被填充,但數據始終保持相對較新的狀態。但實際上,此特性并不適用于當前版本的緩存 API,因為在從緩存中刪除緩存的項之前,不觸發或不完成回調。因此,用戶將頻繁地發出嘗試訪問緩存值的請求,然后發現緩存值為空,不得不等待緩存值的重新填充。我希望在未來的 ASP.NET 版本中看到一個附加的回調,可以稱為 CachedItemExpiredButNotRemovedCallback,如果定義了該回調,則必須在刪除緩存項之前完成執行。

  緩存數據引用模式

  每當我們嘗試訪問緩存中的數據時,都應該考慮到一種情況,那就是數據可能已經不在緩存中了。因此,下面的模式應該普遍適用于您對緩存的數據的訪問。在這種情況下,我們假定已緩存的數據是一個數據表。

public DataTable GetCustomers(bool BypassCache)

{

string cacheKey = "CustomersDataTable";

object cacheItem = Cache[cacheKey] as DataTable;

if((BypassCache)||(cacheItem == null))

{

cacheItem = GetCustomersFromDataSource();

Cache.Insert(cacheKey, cacheItem, null,

DateTime.Now.AddSeconds(GetCacheSecondsFromConfig(cacheKey), TimeSpan.Zero);

 }

return (DataTable)cacheItem;

}

  關于此模式,有以下幾點需要注意:

  1) 某些值(例如,cacheKey、cacheItem 和緩存持續時間)是一次定義的,并且只定義一次。

  2) 可以根據需要跳過緩存 — 例如,當注冊一個新客戶并重定向到客戶列表后,最好的做法可能就是跳過緩存,用最新數據重新填充緩存,該數據包括新插入的客戶。

  3) 緩存只能訪問一次。這種做法可以提高性能,并確保不會發生 NullReferenceExceptions,因為該項在第一次被檢查時是存在的,但第二次檢查之前就已經到期了。

  4) 該模式使用強類型檢查。C# 中的 "as" 運算符嘗試將對象轉換為類型,如果失敗或該對象為空,則只返回 null(空)。

  5) 持續時間存儲在配置文件中。在理想的情況下,所有的緩存依賴項(無論是基于文件的,或是基于時間的,還是其他類型的依賴項)都應該存儲在配置文件中,這樣就可以進行更改并輕松地測量性能。我還建議您指定默認緩存持續時間,而且,如果沒有為所使用的 cacheKey 指定持續時間,就讓 GetCacheSecondsFromConfig() 方法使用該默認持續時間。

  相關的代碼示例是一個 helper 類,它將處理上述所有情況,但允許通過一行或兩行代碼訪問緩存的數據。請下載 CacheDemos.msi.

  小結

  緩存可以使應用程序的性能得到很大的提高,因此在設計應用程序以及對應用程序進行性能測試時應該予以考慮。應用程序總會或多或少地受益于緩存,當然有些應用程序比其他應用程序更適合使用緩存。對 ASP.NET 提供的緩存選項的深刻理解是任何 ASP.NET 開發人員應該掌握的重要技巧。

熱詞搜索:

上一篇:ASP.NET緩存:方法分析和實踐示例(2)
下一篇:最令人頭痛的是網絡是通的,但網速變慢

分享到: 收藏