亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ASP.NET緩存的工作原理

發布時間:2021-08-24 18:06:22 來源:億速云 閱讀:121 作者:chen 欄目:編程語言

這篇文章主要介紹“ASP.NET緩存的工作原理”,在日常操作中,相信很多人在ASP.NET緩存的工作原理問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”ASP.NET緩存的工作原理”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

緩存是在內存存儲數據的一項技術,也是ASP.NET中提供的重要特性之一,對于程序員來講,了解ASP.NET緩存的工作原理對于其設計程序是非常有用的。

ASP.NET需要被緩存的對象多種多樣,包括從數據庫中提取出來的數據,以及aspx頁面生成的靜態頁,甚至是編譯好的程序集。合理利用緩存能讓ASP.NET的性能大幅提升,下面將對ASP.NET中的緩存機制進行簡單概述。

緩存的分類

在ASP.NET中,大部分緩存機制是保存在cache對象中,也就是服務器內存的一部分。當用戶請求數據時,如果數據已經被緩存,則用戶所提取的數據直接從服務端返回,而不是從數據庫等底層數據庫提取。這對性能的提升不得不說很有幫助。下面來看ASP.NET中幾種緩存機制。

程序集緩存

簡單的說,這種緩存是ASP.NET自帶的,無需開發人員進行參與的緩存方式。即當***次請求服務器時,Page類以及相關程序集被編譯,當下次請求時,訪問緩存后的編譯而不是重新編譯。CLR會自動檢測代碼的改變,如果代碼改變后,當下次訪問時,相關代碼會被重新編譯。

數據源緩存

數據源緩存,顧名思義,也就是利用數據源控件對獲取的數據進行緩存的方式。這些控件包括SqlDataSource,ObjectDataSource等,作為抽象類的DataSourceControl暴漏了如下屬性用于緩存:

ASP.NET緩存的工作原理

CacheDuration獲取或設置以秒為單位的一段時間,數據源控件就在這段時間內緩存 SelectMethod 屬性檢索到的數據;CacheExpirationPolicy獲取或設置緩存的到期行為,該行為與持續時間組合在一起可以描述數據源控件所用緩存的行為;CacheKeyDependency獲取或設置一個用戶定義的鍵依賴項,該鍵依賴項鏈接到數據源控件創建的所有數據緩存對象;EnableCaching 獲取或設置一個值,該值指示 ObjectDataSource 控件是否啟用數據緩存。

而使用起來就非常簡單了,只需要將緩存的相關屬性進行設置即可。比如我想要當前數據源緩存10秒,只需要設置EnableCaching屬性和CacheDuration屬性如下,這種方式的工作原理可以用下圖表示:

ASP.NET緩存的工作原理

SQL Cache Dependency

大家應該注意到了上面的數據源控件還暴漏了CacheKeyDependency屬性,這是用于實現SQL Cache Dependency的方式,關于Dependency,其實就是在數據庫表內容改變時,將相應的緩存進行更新,正如Dependency這個詞的意思一樣,是緩存依賴底層數據庫。下面就要說到兩種實現SQL Cache Dependency的方法了。

方法一:使用輪流查詢機制(polling-based)

這種方式實現機制是在sql server中插入以AspNet_SqlCacheNotification_Trigger開頭的一個特殊的表和5個存儲過程,當被監測的表數據發生改變時,則一個名為AspNet_SqlCacheTablesForChangeNotification的表被更新,而ASP.NET程序會根據用戶設置的間隔時間每隔一定時間檢查一下數據庫內容是否更新,如果更新,則將緩存中的數據進行跟新。

使用起來就很簡單了,可以在頁面頭部的OutputCache指令中設置,會社DataSource空間中進行設置,設置格式為:“數據庫名:表名”.里面的表名即是需要監測是否改變的表名,示例如下:

<%@ OutputCache Duration="30" VaryByParam="none" SqlDependency="DatabaseName:tableName" %>

如果需要添加多個表,則用”;”進行分割

SqlDependency="database:table;database:table"

方法二:使用通知機制(notification-based)

使用通知機制配置起來要簡便很多,但是sql server的版本需要9.0以上,也就是sql server 2005,使用這種方式需要將sql server的通知服務開啟,使用通知機制可以對頁面進行緩存,也可以對datasouce控件進行緩存,對頁面進行緩存代碼如下:

<%@ OutputCache Duration="30" VaryByParam="none" SqlDependency="CommandNotification" %>

注意SqlDependency必須設置成CommandNotification,對于datasource控件,也是同樣:

<asp:SqlDataSource ID="SqlDataSource1" runat="server"   ConnectionString="<%$ ConnectionStrings:AdventureWorksConnectionString %>"   SelectCommand="SELECT top 10 * FROM [Person].[Contact]" EnableCaching="true" CacheDuration="10" SqlCacheDependency="CommandNotification"></asp:SqlDataSource>

輸出緩存(output Caching)

輸出緩存是頁面級別的緩存,是將aspx頁面內容在***次請求后生成的靜態頁放入緩存,在不過期時間內每一次請求時從緩存中返回靜態頁,而不是重新走完ASP.NET的生命周期。可以將可以通過在頁面頭部加入OutputCache指令實現,也可以通過HttpCachePolicy類實現,輸出緩存可以緩存整個頁面,也可以緩存部分頁面,緩存頁面的一部分是通過用戶控件來實現,下面來看通過OutputCache指令實現頁面緩存,前面已經看到,這種方式十分簡單,下面說一下OutputCache的重點屬性:

Duration

頁面過期的時間,單位為秒。超過過期時間后,則在下一次請求時頁面會重新生成并緩存。

VaryByHeader  VaryByCustom  VaryByParam  VaryByControl  VaryByContentEncodings

這些屬性都是為了保存頁面的多個版本,比如說一個頁面用于顯示產品,則根據產品id的不同,緩存同一個頁面的不同版本。

CacheProfile

這個選項有些像連接字符串,作用只是將具體的緩存選項變成對于選項的引用,比如我們在Web.Config放入如下代碼:

<caching>         <outputCacheSettings>           <outputCacheProfiles>             <add name="CacheProfile"                   enabled="true"                   duration="60"                    varyByParam="product:id"/>           </outputCacheProfiles>         </outputCacheSettings> </caching>

則在引用時只需要在頁面頭部設置如下:

<%@ OutputCache CacheProfile="CacheProfile" %>

DiskCacheable

因為服務器內存是有限的,所以通過將DiskCacheable屬性設置為true,則可以將緩存頁面放入硬盤中,這樣即使服務器崩潰重啟,緩存依然存在。

緩存部分頁面

緩存頁面的一部分實現原理和緩存整個頁面毫無二致,都是在頁面頭部加入OutputCache指令,***的不同是緩存部分頁面是在用戶控件中進行的。這部分就不在多說了。

使用HttpCachePolicy緩存頁面

前面已經說了通過OutputCache指令在頁面頭部設置緩存選項,另一種替代方法是使用HttpCachePolicy類,這個類的實例是Response.Cache.如果使用HttpCachePolicy設置緩存,則需要在頁面移除OutputCache指令。比如:

<%@ OutputCache  Duration="30" VaryByParam="state;city" %>

和下面代碼是等價的:

Response.Cache.SetExpires(DateTime.Now.AddSeconds(30));  Response.Cache.VaryByParams["state"] = true;  Response.Cache.VaryByParams["city"] = true;

對象緩存

對象緩存是將繼承與System.Object的對象緩存在服務器的內存中,通過Page類的Cache屬性可以訪問到Cache集合。Cache內可以放任何類型的對象,但是要小心使用Cache,因為Cache是占用服務器內存,如果使用不當,也許會拖累性能。使用Cache的例子:

//save object into Cache  Cache["table"] = GridView1;  //get object from Cache  GridView gv = (GridView)Cache["table"];

要注意的是,再提取緩存中的對象時,一定別忘了強制轉換。

到此,關于“ASP.NET緩存的工作原理”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宁波市| 高碑店市| 高清| 北碚区| 南开区| 黄冈市| 慈利县| 庆阳市| 买车| 彭阳县| 霍林郭勒市| 德清县| 怀化市| 丰原市| 潞城市| 绥芬河市| 武宁县| 通江县| 扬中市| 家居| 古蔺县| 和平县| 南汇区| 玉屏| 三台县| 沁源县| 江永县| 缙云县| 巴塘县| 呼图壁县| 大同市| 望奎县| 靖边县| 洪洞县| 龙井市| 河间市| 高州市| 梁河县| 万山特区| 德惠市| 呼伦贝尔市|