日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

asp.net缓存机制

發布時間:2025/5/22 asp.net 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 asp.net缓存机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、緩存的類別

1、頁面輸出ASP.NET數據緩存

頁面輸出緩存是一種傳統級別的相對簡單的緩存機制。它將頁面數據緩存在服務器內存中,當有客戶端再次請求這些內容的時候,服務器可以直接將這些頁面數據輸出,直到數據緩存過期。

頁面輸出緩存有兩種使用方法:

使用@ OutputCache指令,常見代碼如:

〈%@ OutputCache Duration="60" VaryByParam="sID" Location="Any"%〉

以上例子定義了頁面輸出緩存有效時間為60s,60s后新建緩存;緩存版本因頁面傳遞的sID參數不同而不同;Location="Any"指定了。

使用頁面輸出緩存API該方法在頁面的程序部分執行,常見代碼如:

Response.Cache.SetExpires(DataTime.Now.AddSeconds(60));

上句設定頁面緩存有效時間為60s。

2、頁面部分緩存

有時候我們可能并不希望把整個頁面都緩存起來,而只是緩存頁面的某個部分。常用方法有3種:

使用@ OutputCache指令

這種方法的實質是:將需要緩存的這部分內容做成用戶自定義控件,然后為自定義控件設置頁面緩存代碼,方法同頁面輸出緩存。

3、應用程序數據緩存

ASP.NET數據緩存的主要功能是在內存中存儲各種與應用程序相關的對象。方法有三種:?
指定鍵和值

Cache["keyName"] = "123";

該語句將新建或者重寫名稱為txtName的緩存,并賦值為123。

使用Add方法

Cache.Add("keyName","123",null,DataTime.Now.AddSeconds(60),TimeSpan.Zero, CacheItemPriority.High,onRemove);

該句實現上例同樣的功能,并設定其緩存依賴項為null;緩存有效時間為60s;最后一次訪問所添加對象時到該對象過期時間的時間間隔為零(TimeSpan.Zero);緩存對象優先級為High;當緩存被刪除時調用委托名稱為onRemove。

使用Insert方法

Insert方法和Add方法使用方法基本一致,但Insert方法還有幾種自己的重載后的方法,例如:

Cache.Insert("keyName","123");

4、緩存依賴

ASP.NET數據緩存的好處很多,但他也有弊端。比如說數據的實時性,用戶獲取的頁面可能是幾十秒甚至是幾個小時以前的服務器緩存信息,這一點對于實時性要求比較高的程序來說是不可容忍的。這時候我們可以通過設定緩存依賴,通過對依賴文件的更改變動情況的判斷,來決定程序是否需要重建(刷新)緩存。


緩存依賴的方式有很多種,這里我們著重講解自定義依賴緩存: 自定義緩存依賴

代碼:

string fileName = Server.MapPath

("file.xml");//設置文件路徑

DateTime dt = DateTime.Now;

//設置跟蹤依賴文件的開始時間

CacheDependency dep = new CacheDependency

(fileName,dt);//創建依賴對象

?

?

二、緩存使用舉例

?

ASP.NET緩存數據技巧三則

?

  • ﹤%...@?Page?Language="C#"?AutoEventWireup="true"?CodeFile="date.aspx.cs"?Inherits="date"?%﹥?? ?
  • ? ?
  • 2.??﹤%...@?OutputCache?Duration="60"?VaryByParam="CustomerID"?%﹥?? ?
  • ? ?
  • 3.??﹤!DOCTYPE?html?PUBLIC?"-//W3C//DTD?XHTML?1.0?Transitional//EN"?"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"﹥?? ?
  • ? ?
  • 4.??? ?
  • ? ?
  • 5.??﹤html?xmlns="http://www.w3.org/1999/xhtml"?﹥?? ?
  • ? ?
  • 6.??﹤head?runat="server"﹥?? ?
  • ? ?
  • 7.??????﹤title﹥ASP.NET數據緩存﹤/title﹥?? ?
  • ? ?
  • 8.??﹤/head﹥?? ?
  • ? ?
  • 9.??﹤body﹥?? ?
  • ? ?
  • 10.?????﹤form?id="form1"?runat="server"﹥?? ?
  • ? ?
  • 11.?????﹤div﹥?? ?
  • ? ?
  • 12.?????????  ﹤asp:GridView?ID="GridView1"?runat="server"?BackColor="LightGoldenrodYellow"? ?
  • ? ?
  • 13.?????????????BorderColor="Tan"?BorderWidth="1px"?CellPadding="2"?ForeColor="Black"?GridLines="None"﹥?? ?
  • ? ?
  • 14.?????????????﹤FooterStyle?BackColor="Tan"?/﹥?? ?
  • ? ?
  • 15.?????????????﹤SelectedRowStyle?BackColor="DarkSlateBlue"?ForeColor="GhostWhite"?/﹥?? ?
  • ? ?
  • 16.?????????????﹤PagerStyle?BackColor="PaleGoldenrod"?ForeColor="DarkSlateBlue"?HorizontalAlign="Center"?/﹥?? ?
  • ? ?
  • 17.?????????????﹤HeaderStyle?BackColor="Tan"?Font-Bold="True"?/﹥?? ?
  • ? ?
  • 18.?????????????﹤AlternatingRowStyle?BackColor="PaleGoldenrod"?/﹥?? ?
  • ? ?
  • 19.?????????﹤/asp:GridView﹥?? ?
  • ? ?
  • 20.????????? ﹤br?/﹥?? ?
  • ? ?
  • 21.?????????﹤br?/﹥?? ?
  • ? ?
  • 22.?????????﹤asp:HyperLink?ID="HyperLink1"?runat="server"?NavigateUrl="~/date.aspx?CustomerID=16"﹥16﹤/asp:HyperLink﹥?? ?
  • ? ?
  • 23.?????????﹤asp:HyperLink?ID="HyperLink2"?runat="server"?NavigateUrl="~/date.aspx?CustomerID=19"﹥19﹤/asp:HyperLink﹥?? ?
  • ? ?
  • 24.?????????﹤/div﹥?? ?
  • ? ?
  • 25.?????﹤/form﹥?? ?
  • ? ?
  • 26.?﹤/body﹥?? ?
  • ? ?
  • 27.?﹤/html﹥protected?void?Page_Load(object?sender,?EventArgs?e)?? ?
  • ? ?
  • 28.?????...{?? ?
  • ? ?
  • 29.?????????string?conn,?comm,?id;?? ?
  • ? ?
  • 30.?????????if?(Request.QueryString["CustomerID"]?==?null)?? ?
  • ? ?
  • 31.?????????...{?? ?
  • ? ?
  • 32.?????????????id?=?"16";?? ?
  • ? ?
  • 33.?????????}?? ?
  • ? ?
  • 34.?????????else? ?
  • ? ?
  • 35.?????????...{??? ?
  • ? ?
  • 36.?????????????id?=?Request.QueryString["CustomerID"];?? ?
  • ? ?
  • 37.?????????}?? ?
  • ? ?
  • 38.??????????? ?
  • ? ?
  • 39.?????????conn?=?"Server=WEB\SQLEXPRESS;Uid=moon;Pwd=1qaz2wsx;Database=store";?? ?
  • ? ?
  • 40.?????????comm?=?"SELECT?*?FROM?orders?WHERE?CustomerID?="?+?id;?? ?
  • ? ?
  • 41.?? ?
  • ? ?
  • 42.?????????SqlDataAdapter?da?=?new?SqlDataAdapter(comm,?conn);?? ?
  • ? ?
  • 43.?????????DataSet?ds?=?new?DataSet();?? ?
  • ? ?
  • 44.?????????da.Fill(ds);?? ?
  • ? ?
  • 45.?? ?
  • ? ?
  • 46.?????????GridView1.DataSource?=?ds.Tables[0];?? ?
  • ? ?
  • 47.?????????GridView1.DataBind();?? ?
  • ? ?
  • 48.??????????? ?
  • ? ?
  • 49.?????????Response.Write(DateTime.Now.ToString());?? ?
  • ? ?
  • 50.?????}? ?
  • ?

    運行后分別點擊16和19會根據這兩個關鍵字SELECT出不同的數據,這時候根據我們傳遞的兩個參數會分別建立兩個緩存頁,在每點擊一個關鍵字后請記住顯示的時間,再反復刷新看看時間有什么變化!好了接下來講一下數據緩存。 ASP.NET數據緩存(Data Caching) 在System.Web.Caching空間里有一個類“Cache”我們可以通過這個類對數據進行緩存。 最簡單的緩存方法:Cache["MyCacheString"] = "My CSDN BLOG!!!"; 通過賦值的形式建立一個緩存,再通過賦值的形式取出緩存:myLabel.Text = Cache["MyCacheString"].ToString();這種方法使用非常的簡單可是功能上受到了一些限制,為了更完善的訂制緩存,應該使用Cache.Insert()方法,下面舉個例子: 頁面里只需要放一下GridView就可以了

    ?

  • using?System;?? ?
  • ? ?
  • 52.?using?System.Web.Caching;?? ?
  • ? ?
  • 53.?using?System.Data;?? ?
  • ? ?
  • 54.?using?System.Data.SqlClient;?? ?
  • ? ?
  • 55.?using?System.Configuration;?? ?
  • ? ?
  • 56.?using?System.Collections;?? ?
  • ? ?
  • 57.?using?System.Web;?? ?
  • ? ?
  • 58.?using?System.Web.Security;?? ?
  • ? ?
  • 59.?using?System.Web.UI;?? ?
  • ? ?
  • 60.?using?System.Web.UI.WebControls;?? ?
  • ? ?
  • 61.?using?System.Web.UI.WebControls.WebParts;?? ?
  • ? ?
  • 62.?using?System.Web.UI.HtmlControls;?? ?
  • ? ?
  • 63.?? ?
  • ? ?
  • 64.?public?partial?class?DataCache?:?System.Web.UI.Page?? ?
  • ? ?
  • 65.?...{?? ?
  • ? ?
  • 66.?????DataView?dv;//先聲明一個數據視圖用來存放數據庫里的數據表?? ?
  • ? ?
  • 67.?? ?
  • ? ?
  • 68.?????protected?void?Page_Load(object?sender,?EventArgs?e)?? ?
  • ? ?
  • 69.?????...{?? ?
  • ? ?
  • 70.?????????dv?=?(DataView)Cache["ds"];//從ASP.NET數據緩存中讀取數據表?? ?
  • ? ?
  • 71.?? ?
  • ? ?
  • 72.?????????if?(dv?==?null)//如果緩存是空的,就建立數據庫連接,從數據庫里讀數據?? ?
  • ? ?
  • 73.?????????...{?? ?
  • ? ?
  • 74.?????????????string?conn,?comm;?? ?
  • ? ?
  • 75.?????????????conn?=?"Server=WEB\SQLEXPRESS;Uid=moon;Pwd=1qaz2wsx;Database=store";?? ?
  • ? ?
  • 76.?????????????comm?=?"SELECT?*?FROM?orders";?? ?
  • ? ?
  • 77.?? ?
  • ? ?
  • 78.?????????????SqlDataAdapter?da?=?new?SqlDataAdapter(comm,?conn);?? ?
  • ? ?
  • 79.?????????????DataSet?ds?=?new?DataSet();?? ?
  • ? ?
  • 80.?????????????da.Fill(ds);?? ?
  • ? ?
  • 81.?????????????dv?=?ds.Tables[0].DefaultView;?? ?
  • ? ?
  • 82.?????????????//下面這句是關鍵,具體參數后面介紹?? ?
  • ? ?
  • 83.?????????????Cache.Insert("ds",?dv,?null,?System.Web.Caching.Cache.NoAbsoluteExpiration,?TimeSpan.FromMinutes(3));?? ?
  • ? ?
  • 84.?????????????Databind();?? ?
  • ? ?
  • 85.?????????????Label1.Text?=?DateTime.Now.ToString();//參考用的時間,可有可無?? ?
  • ? ?
  • 86.?????????}?? ?
  • ? ?
  • 87.?????????else? ?
  • ? ?
  • 88.?????????...{?? ?
  • ? ?
  • 89.?????????????Databind();?? ?
  • ? ?
  • 90.?????????????Response.Write("Is?Cache?Data!!!");//此句可有可無?? ?
  • ? ?
  • 91.?????????}?? ?
  • ? ?
  • 92.?????}???? ?
  • ? ?
  • 93.??????? ?
  • ? ?
  • 94.?????protected?void?Databind()//自定義的數據綁定方法?? ?
  • ? ?
  • 95.?????...{?? ?
  • ? ?
  • 96.?????????GridView1.DataSource?=?dv;?? ?
  • ? ?
  • 97.?????????GridView1.DataBind();?? ?
  • ? ?
  • 98.?????}?? ?
  • ? ?
  • 99.?}? ?
  • ?

    ASP.NET數據緩存參數說明 Cache.Insert (String, Object, CacheDependency, DateTime, TimeSpan) 1是緩存的名稱,2是緩存的數據對象,3是緩存鍵依賴項,通常為Null,4是過期時間,如果使用相對過期時間則設為NoAbsoluteExpiration,5是可調過期時間,如果參數4使用了固定過期時間,則此參數要設成NoSlidingExpiration。呵呵是不是看的有點暈啊,舉兩個具體例子說一下過期時間的問題 Cache.Insert("ds", dv, null,DateTime.Now.AddMinutes(5) , System.Web.Caching.Cache.NoSlidingExpiration);
    在這個例子里當緩存建立后過5分鐘就過期。
    Cache.Insert("ds", dv, null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(5)); 這個例子里緩存建立后,過期時間為可調,比如1:20秒建立的緩存過期時間應該是6:20但如果在3:20有人訪問了緩存,則過期時間將調整為8:20,以此類推…… 我們在VS2005里建立一個測試看看使用緩存前和使用緩存后的性能變化吧!看到沒有,沒有緩存前用了0.43秒而使用緩存后只用了0.08秒性能相差5倍多啊!!! 三、ASP.NET緩存數據技巧三則 ASP.NET緩存數據技巧:訪問緩存的值 由于緩存中所存儲的信息為易失信息,即該信息可能由 ASP.NET 移除,因此建議先確定該項是否在緩存中。如果不在,則應將它重新添加到緩存中,然后檢索該項。 string?cachedString; if?(Cache["CacheItem"] !=?null) { cachedString = (string)Cache["CacheItem"]; } else { //緩存不存在時 Cache.Insert("CacheItem", "Hello, World.") cachedString = (string)Cache["CacheItem"]; } ASP.NET緩存數據技巧:刪除緩存項 由于以下任一原因,緩存中的數據可能會自動移除:緩存已滿、該項已過期、依賴項發生更改。注意:如果調用 Insert 方法,并向緩存中添加與現有項同名的項,則將從緩存中刪除該舊項。顯示刪除緩存的值: Cache.Remove("MyCacheKey"); ASP.NET緩存數據技巧:刪除緩存項時通知應用程序 從緩存中移除項時通知應用程序,可能非常有用。例如,可能具有一個緩存的報告,創建該報告需花費大量的時間進行處理。當該報告從緩存中移除時,希望重新生成該報告,并立即將其置于緩存中,以便下次請求該報告時,用戶不必等待對此報告進行處理。 ASP.NET 提供了CacheItemRemovedCallback 委托,在從緩存中移除項時能夠發出通知。還提供 CacheItemRemovedReason 枚舉,用于指定移除緩存項的原因。舉例:假設有一個 ReportManager 對象,該對象具有兩種方法,即 GetReport 和 CacheReport。GetReport 報告方法檢查緩存以查看報告是否已緩存;如果沒有,該方法將重新生成報告并將其緩存。CacheReport 方法具有與 CacheItemRemovedCallback 委托相同的函數簽名;從緩存中移除報告時,ASP.NET 會調用 CacheReport 方法,然后將報告重新添加到緩存中。 創建一個 ASP.NET 網頁,該網頁將調用類中用于將項添加到緩存中的方法。 protected?void?Page_Load(object?sender, EventArgs e) { this.Label1.Text = ReportManager.GetReport(); } 創建用于在從緩存中刪除項時處理通知的完整類ReportManager。 using?System; using?System.Web; using?System.Web.Caching; public?static?class?ReportManager { private?static?bool?_reportRemovedFromCache =?false; static?ReportManager() { } //從緩存中獲取項 public?static?String GetReport() { lock?(typeof(ReportManager)) { if?(HttpContext.Current.Cache["MyReport"] !=?null) { //存在MyReport緩存項,返回緩存值 return?(string)HttpRuntime.Cache["MyReport"]; } else { //MyReport緩存項不存在,則創建MyReport緩存項 CacheReport(); return?(string)HttpRuntime.Cache["MyReport"]; } } } //將項以 MyReport 的名稱添加到緩存中,并將該項設置為在添加到緩存中后一分鐘過期。 //并且該方法注冊 ReportRemoveCallback 方法,以便在從緩存中刪除項時進行調用。 public?static?void?CacheReport() { lock?(typeof(ReportManager)) { HttpContext.Current.Cache.Add("MyReport", CreateReport(),?null, DateTime.MaxValue,?new?TimeSpan(0, 1, 0), System.Web.Caching.CacheItemPriority.Default, ReportRemovedCallback); } } //創建報告,該報告時MyReport緩存項的值 private?static?string?CreateReport() { System.Text.StringBuilder myReport =?new?System.Text.StringBuilder(); myReport.Append("Sales Report< br />"); myReport.Append("2005 Q2 Figures< br />"); myReport.Append("Sales NE Region - $2 million< br />"); myReport.Append("Sales NW Region - $4.5 million< br />"); myReport.Append("Report Generated: " + DateTime.Now.ToString() + "< br />"); myReport.Append("Report Removed From Cache: " + _reportRemovedFromCache.ToString()); return?myReport.ToString(); } //當從緩存中刪除項時調用該方法。 public?static?void?ReportRemovedCallback(String key,?object?value, CacheItemRemovedReason removedReason) { _reportRemovedFromCache =?true; CacheReport(); } } 不應在 ASP.NET 頁中實現回調處理程序,因為在從緩存中刪除項之前該頁可能已被釋放,因此用于處理回調的方法將不可用,應該在非ASP.NET的程序集中實現回調處理程序。為了確保從緩存中刪除項時處理回調的方法仍然存在,請使用該方法的靜態類。但是,靜態類的缺點是需要保證所有靜態方法都是線程安全的,所以使用lock關鍵字。

    本文轉自linzheng 51CTO博客,原文鏈接:http://blog.51cto.com/linzheng/1081796
    《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的asp.net缓存机制的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 999久久久久久久久6666 | 91麻豆成人精品国产免费网站 | 大尺度摸揉捏胸床戏视频 | 美国黄色片网站 | 一区二区精品视频在线观看 | 精品人妻人伦一区二区有限公司 | 国产高清一区二区 | 欧美一区二区国产 | 日本黄视频在线观看 | 日韩一级久久 | 中文字幕 国产精品 | 自拍偷拍麻豆 | 五月激情婷婷网 | 成年人的视频网站 | 欧美激情图 | 天天干天天操天天舔 | av男人的天堂在线 | 日韩啊v| 久久视频在线观看 | 亚洲热在线 | 日韩av三区 | 日本黄色免费观看 | 在线步兵区 | 芒果视频在线观看免费 | 黄网站在线免费看 | 日产亚洲一区二区三区 | 精品无码国产污污污在线观看 | 青娱乐国产在线视频 | 日韩18p| 日韩极品在线观看 | 不卡的av| 大胸美女无遮挡 | 久草a在线 | 91精品国产91久久久久久黑人 | 91香蕉视频在线 | 婷婷国产成人精品视频 | 女人被男人躁得好爽免费视频 | 国产不卡一区二区视频 | 免费看毛片的网站 | 成人在线视频免费看 | 韩国裸体网站 | 韩国一二三区 | 日韩成人在线一区 | 久久久视屏 | 亚洲国产精品天堂 | 艹男人的日日夜夜 | 一级做a免费视频 | 天堂综合网久久 | 国产欧美一区二区三区国产幕精品 | 五月天国产视频 | 国产91在线视频观看 | 国产精品黄色av | 日韩精品一区二区三区四区五区 | 凹凸精品熟女在线观看 | 综合久久久| 成人午夜免费在线观看 | 五月色婷婷综合 | 欧美性猛交富婆 | 人妖和人妖互交性xxxx视频 | 黄色片网站在线 | 免费无遮挡在线观看视频网站 | 视色在线| 精品久久9999 | 亚洲高清毛片 | 成年人视频在线观看免费 | 中文字幕一区二区三区乱码在线 | 精品国产乱码久久久久久郑州公司 | 美女黄色影院 | 日韩av一| 中文字幕在线观看日本 | 国产香蕉尹人视频在线 | 人人爽在线 | 又爽又黄视频 | 成人中文视频 | 99爱在线| 漂亮人妻洗澡被公强 日日躁 | 国产电影一区二区三区 | 农民人伦一区二区三区 | 蓝牛av | 国产一区二区三区四 | 在线观看的免费 | 黄色大尺度视频 | 日本少妇xxxx | 国产精品久久久无码一区 | 99在线观看免费 | 国产三级久久久久 | 亚洲va国产天堂va久久 en | 蜜桃视频一区二区 | 一区二区三区四区在线观看视频 | 色呦呦视频 | 在线看片亚洲 | 久久精品国产亚洲AV黑人 | 玖玖色在线 | 免费欧美黄色 | 免费视频成人 | 特黄特色特刺激免费播放 | 久久免费在线视频 | 成年人av在线 | 黄色大片视频网站 |