成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ASP.NET緩存數據技巧三則

開發 后端
ASP.NET使用緩存機制,將需要大量服務器資源來創建的對象存儲在內存中。本文介紹在編寫ASP.NET應用時可能會用到的三個ASP.NET緩存數據技巧。

ASP.NET緩存數據技巧:訪問緩存的值

由于緩存中所存儲的信息為易失信息,即該信息可能由 ASP.NET 移除,因此建議先確定該項是否在緩存中。如果不在,則應將它重新添加到緩存中,然后檢索該項。

  1. string cachedString;  
  2. if (Cache["CacheItem"] != null)  
  3. {  
  4.     cachedString = (string)Cache["CacheItem"];  
  5. }  
  6. else 
  7. {  
  8.  
  9.      //緩存不存在時  
  10.     Cache.Insert("CacheItem""Hello, World.")  
  11.     cachedString = (string)Cache["CacheItem"];  
  12. }  

ASP.NET緩存數據技巧:刪除緩存項

由于以下任一原因,緩存中的數據可能會自動移除:緩存已滿、該項已過期、依賴項發生更改。注意:如果調用 Insert 方法,并向緩存中添加與現有項同名的項,則將從緩存中刪除該舊項。顯示刪除緩存的值:

  1. Cache.Remove("MyCacheKey"); 

ASP.NET緩存數據技巧:刪除緩存項時通知應用程序

從緩存中移除項時通知應用程序,可能非常有用。例如,可能具有一個緩存的報告,創建該報告需花費大量的時間進行處理。當該報告從緩存中移除時,希望重新生成該報告,并立即將其置于緩存中,以便下次請求該報告時,用戶不必等待對此報告進行處理。

ASP.NET 提供了CacheItemRemovedCallback 委托,在從緩存中移除項時能夠發出通知。還提供 CacheItemRemovedReason 枚舉,用于指定移除緩存項的原因。舉例:假設有一個 ReportManager 對象,該對象具有兩種方法,即 GetReport 和 CacheReport。GetReport 報告方法檢查緩存以查看報告是否已緩存;如果沒有,該方法將重新生成報告并將其緩存。CacheReport 方法具有與 CacheItemRemovedCallback 委托相同的函數簽名;從緩存中移除報告時,ASP.NET 會調用 CacheReport 方法,然后將報告重新添加到緩存中。

1)創建一個 ASP.NET 網頁,該網頁將調用類中用于將項添加到緩存中的方法。

  1. protected void Page_Load(object sender, EventArgs e)  
  2. {  
  3.     this.Label1.Text = ReportManager.GetReport();  

2)創建用于在從緩存中刪除項時處理通知的完整類ReportManager。

  1. using System;  
  2. using System.Web;  
  3. using System.Web.Caching;  
  4. public static class ReportManager  
  5. {  
  6.     private static bool _reportRemovedFromCache = false;  
  7.       
  8.     static ReportManager() { }  
  9.       
  10.     //從緩存中獲取項  
  11.     public static String GetReport()  
  12.     {  
  13.         lock (typeof(ReportManager))  
  14.         {  
  15.             if (HttpContext.Current.Cache["MyReport"] != null)  
  16.             {    //存在MyReport緩存項,返回緩存值  
  17.                 return (string)HttpRuntime.Cache["MyReport"];  
  18.             }  
  19.             else 
  20.             {   //MyReport緩存項不存在,則創建MyReport緩存項  
  21.                 CacheReport();  
  22.                 return (string)HttpRuntime.Cache["MyReport"];  
  23.             }  
  24.         }  
  25.     }  
  26.  
  27.     //將項以 MyReport 的名稱添加到緩存中,并將該項設置為在添加到緩存中后一分鐘過期。  
  28.     //并且該方法注冊 ReportRemoveCallback 方法,以便在從緩存中刪除項時進行調用。  
  29.     public static void CacheReport()  
  30.     {  
  31.         lock (typeof(ReportManager))  
  32.         {  
  33.             HttpContext.Current.Cache.Add("MyReport",  
  34.                 CreateReport(), null, DateTime.MaxValue,  
  35.                 new TimeSpan(0, 1, 0),   
  36.                 System.Web.Caching.CacheItemPriority.Default,  
  37.                 ReportRemovedCallback);  
  38.         }  
  39.     }  
  40.  
  41.     //創建報告,該報告時MyReport緩存項的值  
  42.     private static string CreateReport()  
  43.     {  
  44.         System.Text.StringBuilder myReport =   
  45.             new System.Text.StringBuilder();  
  46.         myReport.Append("Sales Report< br />");  
  47.         myReport.Append("2005 Q2 Figures< br />");  
  48.         myReport.Append("Sales NE Region - $2 million< br />");  
  49.         myReport.Append("Sales NW Region - $4.5 million< br />");  
  50.         myReport.Append("Report Generated: " + DateTime.Now.ToString()   
  51.             + "< br />");  
  52.         myReport.Append("Report Removed From Cache: " +   
  53.             _reportRemovedFromCache.ToString());  
  54.         return myReport.ToString();  
  55.     }  
  56.  
  57.     //當從緩存中刪除項時調用該方法。  
  58.     public static void ReportRemovedCallback(String key, object value,   
  59.         CacheItemRemovedReason removedReason)  
  60.     {  
  61.         _reportRemovedFromCache = true;  
  62.         CacheReport();  
  63.     }  
  64. }  

不應在 ASP.NET 頁中實現回調處理程序,因為在從緩存中刪除項之前該頁可能已被釋放,因此用于處理回調的方法將不可用,應該在非ASP.NET的程序集中實現回調處理程序。為了確保從緩存中刪除項時處理回調的方法仍然存在,請使用該方法的靜態類。但是,靜態類的缺點是需要保證所有靜態方法都是線程安全的,所以使用lock關鍵字。

本文來自菩提屋:《緩存應用程序數據(二)》

【編輯推薦】

  1. ASP.NET緩存數據添加方法一覽
  2. ASP.NET緩存機制基礎概念
  3. 再談ASP.NET緩存機制:開發效率與優化的平衡
  4. .NET分布式緩存之Memcached執行速度檢測
  5. 如何避免ASP.NET緩存占用系統資源
責任編輯:yangsai 來源: 菩提屋
相關推薦

2009-07-30 08:49:58

ASP.NET中usi

2009-08-03 18:47:12

ASP.NET數據緩存

2009-08-03 18:35:51

ASP.NET數據緩存

2009-07-24 12:14:17

asp.net技巧

2009-07-31 10:23:44

緩存頁面ASP.NET緩存

2009-07-24 11:24:33

ASP.NET中文亂碼

2009-07-31 09:57:47

ASP.NET數據庫緩

2009-07-31 10:33:54

ASP.NET頁面輸出

2009-08-04 15:22:33

ASP.NET緩存機制

2009-07-29 14:35:34

頁面輸出緩存ASP.NET

2009-01-03 09:34:30

ASP.NET.NET性能優化

2009-07-29 10:35:51

ASP.NET緩存

2009-07-29 10:52:09

數據采集程序ASP.NET技巧

2009-07-29 15:34:13

2009-07-29 13:32:06

ASP.NET控件使用

2009-07-29 13:42:25

ASP.NET注釋

2009-05-11 13:48:00

ASP.NET 2.0緩存效率

2009-08-17 16:59:36

ASP.NET緩存機制

2009-08-17 17:19:00

ASP.NET緩存數據

2009-07-23 13:47:46

ASP.NET數據緩存
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 免费在线一区二区 | 国产成人亚洲精品自产在线 | 久久天天综合 | 91 在线| 日日碰狠狠躁久久躁婷婷 | 久久精品欧美一区二区三区麻豆 | 成人免费福利视频 | 激情在线视频网站 | 欧美成人一区二区三区 | 国产成人精品免高潮在线观看 | 成人精品鲁一区一区二区 | 精品国产一区二区三区成人影院 | 欧美日韩亚洲国产 | 国产激情视频在线观看 | 亚洲精品久久久久久国产精华液 | 草草精品| 伊人网站 | 性高湖久久久久久久久 | 日日夜夜精品 | 两性午夜视频 | www狠狠爱com| 99riav国产一区二区三区 | 国产精品视频导航 | 伊人一二三| 日本精品久久 | 91精品国产一区二区三区 | www.夜夜骑.com | h片在线观看网站 | 日韩精品久久一区二区三区 | 一区二区三区四区在线视频 | 久久精品天堂 | 一区二区三区日韩 | 国产亚洲精品久久久久动 | 天天成人综合网 | 欧美激情免费在线 | 久久伊 | 99久久精品免费视频 | 在线观看视频一区 | 久久久av | 欧美一级片 | 天天澡天天狠天天天做 |