日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

頁面緩存『轉(zhuǎn)』

系統(tǒng) 2008 0

一般情況下,WEB頁面都會(huì)在Internet臨時(shí)文件夾中有一個(gè)臨時(shí)文件.
我在操作IE時(shí)會(huì)出現(xiàn)這種情況:
假如說有一個(gè)頁面Page1.aspx,在我第一次訪問后,它會(huì)在我的Internet臨時(shí)文件夾里有一個(gè)Page1.aspx文件生成.之后,如果我改了Page1.aspx的數(shù)據(jù)后再次訪問該頁面,發(fā)現(xiàn)IE并沒有對(duì)這個(gè)Page1.aspx的數(shù)據(jù)進(jìn)行更新,反而打開的是我第一次訪問的頁面.為什么會(huì)這樣,是因?yàn)镮E自動(dòng)(默認(rèn))調(diào)用了Internet臨時(shí)文件夾里有一個(gè)Page1.aspx文件,而不是重新下載新的Page1.aspx.
怎樣能讓IE自動(dòng)重新下載新的Page1.aspx呢?
一種方法是對(duì)Internet選項(xiàng)進(jìn)行設(shè)置.
Internet選項(xiàng)-->常規(guī)-->Internet臨時(shí)文件中"設(shè)置"-->每次訪問此頁時(shí)檢查.
這種設(shè)置時(shí)最好同時(shí)刪除臨時(shí)文件.
這種方法是讓客戶自己設(shè)置自己的瀏覽器,如果客戶忘記了設(shè)置,那么,新的頁面總是下載不到本地.這時(shí),客戶會(huì)怎樣認(rèn)為呢?("肯定是程序的錯(cuò)!"其實(shí)也不是程序的錯(cuò),但是用程序完全可以解決這個(gè)問題)
第二種方法:用程序自己來讓頁面自動(dòng)下載.
這種方法實(shí)際上是讓頁面不保存到Internet臨時(shí)文件夾中,每次訪問頁面都會(huì)讓瀏覽器下載頁面.
只要在aspx.cs代碼的Page_Load事件中加上

Context.Response.Cache.SetCacheability(HttpCacheability.NoCache);

即可.

不防你試試.在不加這句時(shí),你打開頁面,Internet臨時(shí)文件夾里會(huì)有一個(gè)頁面文件,而加了,就會(huì)沒有了.
不過,像aspx文件中如果有圖片文件或js文件,那還是會(huì)下載到Internet臨時(shí)文件夾的.


-------------------------------------------------------------------------------------------------------------------


頁面緩存

使用 OutputCache 指令。

<%@ OutputCache Duration="3600"

????????????? ? Location="Any"

????????????? ? VaryByCustom="browser"

????????????? ? VaryByParam="RequestID" %>

其中 Duration VaryByParam 特性是必須的。

?

Location 控制頁面緩存的位置

Location

含義

Any

默認(rèn)值。意味著頁面的輸出可以緩存在客戶端瀏覽器,緩存在任何“下游”的客戶端(如代理服務(wù)器),或緩存在 Web 服務(wù)器本身

Client

指明輸出緩存只能存儲(chǔ)在發(fā)出請(qǐng)求的客戶端(即瀏覽器)的本地緩存中

Downstream

指明輸出緩存能存儲(chǔ)在任何支持 HTTP1.1 緩存的設(shè)備(如代理服務(wù)器)中

Server

指明輸出緩存將存儲(chǔ)在 Web 服務(wù)器上

None

指明該頁面禁用輸出緩存

?

Duration 允許我們控制頁面在緩存中生存的時(shí)間(單位是秒)

?

VaryByParam 允許我們緩存頁面的不同版本。在上面的例子中, VaryByParam 設(shè)為了 RequestID ,所以 ASP.NET 使用 RequestID 參數(shù)的不同值,這些值或者是在 HTTP GET 的查詢字符串中傳入,或者是在 HTTP POST 的參數(shù)中傳入。可以通過檢查 RequestID 參數(shù)的值讓應(yīng)用程序區(qū)分不同的用戶;通過在頁面的 OutputCache 指令中放置 VaryByParam "RequestID" ,可以讓 ASP.NET 為每個(gè)用戶緩存頁面的不同版本。

如果不想根據(jù)參數(shù)的值緩存頁面的不問版本,那么只要把 VaryByParam 設(shè)為 none

也可以要求 ASP.NET 為每個(gè)可能的參數(shù)組合緩存頁面的一個(gè)版本。為此,可把 VaryByParam 設(shè)為 *

?

VaryByHeader VaryByCustom 特性與 VaryByParam 的相似之處在于,它們?cè)试S指定何時(shí)應(yīng)創(chuàng)建頁面新的緩存版本。

VaryByHeader 允許我們根據(jù)由分號(hào)分隔的 HTTP 頭的列表末緩存頁面的不向版本。

VaryByCustom 當(dāng)設(shè)為 browser 時(shí),允許我們根據(jù)瀏覽器的名稱和主版本信息緩存不同版本。也可以把它設(shè)為一個(gè)自定義方法的名稱,從而實(shí)現(xiàn)我們自己的邏輯,控制緩存的版本。

?

片斷緩存

可以利用用戶控件將頁面分段,在 ascx 文件中寫入緩存的語句,而不在 aspx 文件中寫緩存語句,這樣 ASP.NET 就可以只緩存 ascx 片斷的輸出了。一般像頁眉或頁腳基本上都是一樣的,就不需要重新加載。但是如果其中有動(dòng)態(tài)變化的數(shù)據(jù)就不能對(duì)其進(jìn)行緩存,因?yàn)橐坏┍痪彺婧蟪绦蚓筒粫?huì)再創(chuàng)建它的實(shí)例來更新數(shù)據(jù)顯示,只有等到生存期過期才行,所以對(duì)于這種情況就不適于用頁面片斷緩存。

注意:

一、注意片段緩存不支持 Location 特性;緩存頁面片段惟一合法的地方是 web 服務(wù)器。這是因?yàn)槠尉彺嬖? ASP.NET 中是新的功能,所以瀏覽器和代理服務(wù)器不支持。

二、片段緩存有另外一個(gè)在頁面緩存中沒有的特性—— VaryByControl VaryByControl 特性允許指定一個(gè)由分號(hào)分隔的字符串列表,代表用戶控件內(nèi)使用的控件的名稱; ASP.NET 將針對(duì)值的每個(gè)不同的組合生成用戶構(gòu)件的一個(gè)緩存版本。

?

數(shù)據(jù)緩存

低級(jí) API Cache 類,它位于 ASP.NET 中的 System.web.Caching 命名空間,可以用它緩存生成很耗費(fèi)資源的數(shù)據(jù)。 Cache 類的使用和 Session Application 對(duì)象一樣簡(jiǎn)單。每個(gè)應(yīng)用程序只有一個(gè) Cache 對(duì)象——這意味著使用 Cache 對(duì)象存儲(chǔ)在緩存中的數(shù)據(jù)是應(yīng)用程序級(jí)別的數(shù)據(jù)。使事情更為簡(jiǎn)單的是, Page 類的 Cache 屬性使應(yīng)用程序的 Cache 對(duì)象實(shí)例能在代碼中使用。

通過 Cache 對(duì)象緩存的數(shù)據(jù)存儲(chǔ)在應(yīng)用程序的內(nèi)存中。這意味著該數(shù)據(jù)的生存期不會(huì)超過應(yīng)用程序的重啟 ( 事實(shí)上,這和存儲(chǔ)在 Application Session 對(duì)象中的數(shù)據(jù)一樣,除非使用 StateService SQL State 會(huì)話模式存儲(chǔ) Session 數(shù)據(jù) )

具體的使用和語法與 Session Application 一樣。轉(zhuǎn)換回來的時(shí)候需要注意對(duì)其進(jìn)行相應(yīng)類型的強(qiáng)制類型轉(zhuǎn)換。

?

這不是在 ASP.NET 緩存中添加緩存項(xiàng)的惟一方式。 Cache 對(duì)象有兩個(gè)方法 Insert() 方法和 Add() 方法,它們靈活性更高。它們的用法近似,但稍有不同:

Insert() 方法用于覆蓋 ASP.NET 緩存中現(xiàn)有的緩存項(xiàng)。

Add() 方法只用于在 ASP.NET 緩存中添加新的緩存項(xiàng) ( 如果用它覆蓋現(xiàn)有的緩存項(xiàng),則會(huì)失敗 )

每個(gè)方法都有 7 個(gè)參數(shù),而且兩個(gè)方法的參數(shù)相同。

在緩存某一項(xiàng)時(shí),可以指定它的相關(guān)性,告訴 ASP.NET 該緩存項(xiàng)在緩存中一直保留到某個(gè)事件發(fā)生時(shí)為止。

相關(guān)性值

含義

CacheDependency

允許指定一個(gè)文件或緩存鍵。如果文件發(fā)生變化,對(duì)象就被刪除。如果緩存鍵發(fā)生變化,對(duì)象也被刪除。

DateTime

這是一個(gè) DataTime 值,指明緩存數(shù)據(jù)過期的時(shí)間(絕對(duì)過期時(shí)間)

TimeSpan

這是一個(gè)時(shí)間間隔,指明緩存數(shù)據(jù)在上一次訪問后可以在緩存中保留多長(zhǎng)時(shí)間(彈性過期時(shí)間)

使用 CacheItemPriority 來指定緩存數(shù)據(jù)的優(yōu)先級(jí),以便在緩存被填滿的時(shí)候刪除那些優(yōu)先級(jí)低的數(shù)據(jù)。

優(yōu)先級(jí)值

含義

High

設(shè)為此優(yōu)先級(jí)的緩存項(xiàng)是最不可能在內(nèi)存不足時(shí)被刪除的

AboveNormal

設(shè)為此優(yōu)先級(jí)的緩存項(xiàng)比優(yōu)先級(jí)為 Normal 或以下的緩存項(xiàng)更優(yōu)先保留

Normal

設(shè)為此優(yōu)先級(jí)的緩存項(xiàng)比優(yōu)先級(jí)為 BelowNormal Low 的緩存項(xiàng)更優(yōu)先保留

BelowNormal

這是倒數(shù)第二級(jí)的優(yōu)先級(jí);設(shè)為此優(yōu)先級(jí)的緩存項(xiàng)只比優(yōu)先級(jí)設(shè)為 Low 的緩存項(xiàng)更優(yōu)先保留

Low

設(shè)為此優(yōu)先級(jí)的緩存項(xiàng)是最有可能在內(nèi)存不足時(shí)被刪除的

Default

緩存項(xiàng)的優(yōu)先級(jí)的默認(rèn)值是 Normal

NotRemovable

當(dāng)緩存項(xiàng)設(shè)為此優(yōu)先級(jí)時(shí),是在告訴 ASP.NET 即使是內(nèi)存不足,也不要從緩存中刪除它

DateTime dt = new DateTime(DateTime . Now . Year, 12 , 31 );

Cache . Add( "MembersDataSet" ,dsMembers, null ,

dt,TimeSpan . Zero,

CacheItemPriority . Normal, null );

第一個(gè)參數(shù)是引用緩存對(duì)象的鍵,第二個(gè)參數(shù)是要緩存的對(duì)象。第三個(gè)參數(shù)是 null( 表明沒有相關(guān)性 )

第四和第五個(gè)參數(shù)是絕對(duì)的過期時(shí)間和彈性的過期時(shí)間。這里,我們指定緩存應(yīng)在當(dāng)前年份的最后一天過期 (dt) 。我們想指定沒有彈性的過期時(shí)間,所以第五個(gè)參數(shù)使用 TimeSpan.Zero 。第六個(gè)參數(shù)使用 System.Web.Caching.CacheItemPriority 枚舉中的一個(gè)值,把優(yōu)先級(jí)設(shè)為 Normal

?

指定一個(gè) 5 分鐘的彈性過期時(shí)間,沒有指定絕對(duì)過期時(shí)間

Cache . Add( "MembersDataSet" ,dsMembers, null ,

??????????????? DateTime . MaxValue,TimeSpan . FromMinutes( 5 ),

??????????? CacheItemPriority . Normal, null );

?

添加一個(gè)相關(guān)性。在這個(gè)例子中,過期時(shí)間也取決于一個(gè)文件的修改,即 test.xml 文件:

CacheDependency dep = new CacheDependency( @"C:\test.xml" );

Cache . Add( "MembersDataSet" ,dsMembers,dep,

??????????????? DateTime . MaxValue,TimeSpan . FromMinutes( 5 ),

??????????? CacheItemPriority . Normal, null );

?

過期時(shí)間取決于緩存中另一項(xiàng)的修改:

String[] dependencyKeys = new String[ 1 ];

dependencyKeys[ 0 ] = "MembersChanged" ;

CacheDependency dependency = new CacheDependency( null , dependencyKeys);

Cache . Add( "MembersDataSet" ,dsMembers,dependency,

??????????????? DateTime . MaxValue,TimeSpan . Zero,

??????????? CacheItemPriority . Normal, null );

?

最后一個(gè)參數(shù)是 CacheItemRemovedCallback 類型的,允許我們?cè)诰彺骓?xiàng)從緩存中刪除時(shí)要求通知,可以編寫一個(gè)自定義的方法 ( 像這里的 ItemRemovedCallback() 方法 ) ,然后在第 7 個(gè)參數(shù)中指定該方法:

??????? public void ItemRemovedCallback(String key, Object value , CacheItemRemovedReason reason)

??????? {

??????? }

?

Cache . Add( "MembersDataSet" ,dsMembers,dependency,

??????? ??????? DateTime . MaxValue,TimeSpan . FromMinutes( 5 ),

??? ??????? CacheItemPriority . Normal,

new CacheItemRemovedCallback( this . ItemRemovedCallback));

第一個(gè)參數(shù)是在緩存中存儲(chǔ)緩存項(xiàng)時(shí)使用的鍵,第二個(gè)是存儲(chǔ)的對(duì)象本身,第三個(gè)是緩存項(xiàng)刪除的原因。

?

頁面緩存『轉(zhuǎn)』


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 五家渠市| 莱芜市| 时尚| 卓资县| 汝州市| 英超| 开化县| 乐亭县| 平凉市| 临海市| 哈巴河县| 普格县| 余庆县| 三门县| 日土县| 衡阳县| 湾仔区| 华安县| 吴忠市| 茶陵县| 洛扎县| 四平市| 都江堰市| 高平市| 诏安县| 理塘县| 宁河县| 鄂尔多斯市| 琼结县| 平塘县| 南木林县| 大名县| 湟源县| 兴和县| 伊吾县| 榆林市| 丁青县| 蕉岭县| 通辽市| 府谷县| 宣恩县|