.NET之頁面資料快取
在原始碼中設定頁面快取
@ OutputCache:以宣告的方式控制 ASP.NET 頁或頁中包含的使用者控制元件的輸出快取策略。
主要屬性:
Duration:頁或使用者控制元件進行快取的時間(以秒計)。在頁或使用者控制元件上設定該屬性為來自物件的 HTTP 響應建立了一個過期策略,並將自動快取頁或使用者控制元件輸出。這是必選屬性。如果未包含該屬性,將出現分析器錯誤。
Location:指定有效值,用於控制資源的輸出快取 HTTP 響應的位置。預設值為 Any。包含在使用者控制元件(.ascx 檔案)中的 @ OutputCache 指令不支援此屬性。
成員名稱
說明
Any 輸出快取可位於產生請求的瀏覽器客戶端、參與請求的代理伺服器(或任何其他伺服器)或處理請求的伺服器上。
Client 輸出快取位於產生請求的瀏覽器客戶端上。
Downstream 輸出快取可儲存在任何 HTTP 1.1 可快取裝置中,源伺服器除外。這包括代理伺服器和發出請求的客戶端。
Server 輸出快取位於處理請求的 Web 伺服器上。
None 對於請求的頁,禁用輸出快取。
ServerAndClient 輸出快取只能儲存在源伺服器或發出請求的客戶端中。代理伺服器不能快取響應。
CacheProfile:與該頁關聯的快取設定的名稱。這是可選屬性,預設值為空字串 ("")。包含在使用者控制元件(.ascx 檔案)中的 @ OutputCache 指令不支援此屬性。在頁中指定此屬性時,屬性值必須與 outputCacheSettings 節下面的 outputCacheProfiles 元素中的一個可用項的名稱匹配。如果此名稱與配置檔案項不匹配,將引發異常。
NoStore:一個布林值,它決定了是否阻止敏感資訊的二級儲存。將此屬性設定為 true 等效於在請求期間執行以下程式碼:Response.Cache.SetNoStore();包含在使用者控制元件(.ascx 檔案)中的 @ OutputCache 指令不支援此屬性。
Shared:一個布林值,確定使用者控制元件輸出是否可以由多個頁共享。預設值為 false。 包含在 ASP.NET 頁(.aspx 檔案)中的 @ OutputCache 指令不支援此屬性。
SqlDependency:標識一組資料庫/表名稱對的字串值,頁或控制元件的輸出快取依賴於這些名稱對。可選值:database/table name pair和CommandNotification。SqlDependency 屬性的 CommandNotification 值僅在網頁 (.aspx) 中有效。使用者控制元件只能將基於表的輪詢用於 @ OutputCache 指令。
VaryByCustom:表示自定義輸出快取要求的任意文字。如果賦予該屬性的值為 browser,快取將隨瀏覽器名稱和主要版本資訊的不同而異。如果輸入自定義字串,則必須在應用程式的 Global.asax 檔案中重寫 GetVaryByCustomString 方法。
VaryByHeader:分號分隔的 HTTP 標頭列表,用於使輸出快取發生變化。將該屬性設為多標頭時,對於每個指定標頭組合,輸出快取都包含一個不同版本的請求文件。
設定 VaryByHeader 屬性將啟用在所有 HTTP 1.1 版快取中快取項,而不僅僅在 ASP.NET 快取中進行快取。使用者控制元件中的 @ OutputCache 指令不支援此屬性。
VaryByParam:分號分隔的字串列表,用於使輸出快取發生變化。預設情況下,這些字串與隨 GET 方法屬性傳送的查詢字串值對應,或與使用 POST 方法傳送的引數對應。將該屬性設定為多個引數時,對於每個指定引數組合,輸出快取都包含一個不同版本的請求文件。可能的值包括 none、星號 (*) 以及任何有效的查詢字串或 POST 引數名稱。在 ASP.NET 頁和使用者控制元件上使用 @ OutputCache 指令時,需要該屬性或 VaryByControl 屬性。如果沒有包含它,則發生分析器錯誤。如果不希望通過指定引數來改變快取內容,請將值設定為 none。如果希望通過所有的引數值改變輸出快取,請將屬性設定為星號 (*))。
VaryByControl:一個分號分隔的字串列表,用於更改使用者控制元件的輸出快取。這些字串代表使用者控制元件中宣告的 ASP.NET 伺服器控制元件的 ID 屬性值。在 ASP.NET 頁和使用者控制元件上使用 @ OutputCache 指令時,需要該屬性或 VaryByParam 屬性。
VaryByContentEncodings:以分號分隔的字串列表,用於更改輸出快取。將 VaryByContentEncodings 屬性用於 Accept-Encoding 標頭,可確定不同內容編碼獲得快取響應的方式。
事例:
在頁面原始碼中新增如下程式碼,當前頁面快取100秒。
在cs程式碼中,在using的下方新增如下程式碼,當前頁面快取100秒。
[PartialCaching(100)]
在cs程式碼中調節使用者控制元件中頁面快取。
//test.ascx使用者控制元件中設定了頁面快取
PartialCachingControl pcc = LoadControl("test.ascx") as PartialCachingControl;
//如果控制元件中頁面快取大於10秒
if(pcc.CachePolicy.Duration>TimeSpan.FromSeconds(10))
{
//設定控制元件中頁面快取為20秒
pcc.CachePolicy.SetExpires(DateTime.Now.Add(TimeSpan.FromSeconds(20)));
//設定快取和調還是絕對過期
pcc.CachePolicy.SetSlidingExpiration(false);
}
//將控制元件新增到頁面
Controls.Add(pcc);
通過頁面資料快取填充GridView Code
protected void Page_Load(object sender, EventArgs e)
{
//判斷快取中是否包含"key"的資料,有就讀取,否則讀取xml檔案中的資料
DataSet ds = new DataSet();
if (Cache["key"] == null)
{
ds.ReadXml(Server.MapPath("~/XMLFile.xml");
this.GridView1.DataSource=ds;
this.GridView1.DataBind();
}
else
{
ds=(DataSet)Cache["key"];
this.GridView1.DataSource=ds;
this.GridView1.DataBind();
}
}
protected void DisplayCacheInfo()
{
//cache裡的數量
string cacheCount = Cache.Count.ToString();
//列舉cache
IDictionaryEnumerator cacheEnum = Cache.GetEnumerator();
//將每一個cache名稱列印螢幕上
while (cacheEnum.MoveNext())
{
this.Label1.Text += cacheEnum.Key.ToString();
}
}
protected void Buttonadd_Click(object sender, EventArgs e)
{
//新增cache
if (Cache["key"] == null)
{
DataSet ds = new DataSet();
ds.ReadXml(Server.MapPath("~/XMLFile.xml");
Cache.Insert("key",ds,new System.Web.Caching.CacheDependency(Server.MapPath("XMLFile.xml")));
}
DisplayCacheInfo();
}
protected void Buttonselect_Click(object sender, EventArgs e)
{
//檢索cache
if (Cache["key"] != null)
DisplayCacheInfo();
}
protected void Buttondelete_Click(object sender, EventArgs e)
{
//移除cache
if (Cache["key"] != null)
{
Cache.Remove("key");
}
DisplayCacheInfo();
}
原文:http://www.cnblogs.com/shanymen/archive/2009/05/25/1488839.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-604081/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ASP.NET清除頁面快取ASP.NET快取
- 禁止頁面快取資料的方法分享快取
- 去除頁面快取快取
- .net資料快取快取
- Nginx之11吸星大法 - (頁面快取)Nginx快取
- Nuxt頁面級快取UX快取
- 頁面快取優化快取優化
- ASP.NET 2.0中的頁面輸出快取ASP.NET快取
- 2PHP頁面快取PHP快取
- C#清除頁面快取C#快取
- ASP.NET2.0揭祕讀書筆記之八——頁面輸出快取ASP.NET筆記快取
- 系統快取全解析2:頁面輸出快取快取
- 淺析ASP.NET頁面快取的幾點體會ASP.NET快取
- 系統快取全解析3:頁面區域性快取快取
- Vue 頁面快取keep-aliveVue快取Keep-Alive
- 使用Nginx+Memcache做頁面快取Nginx快取
- nuxt3正確使用keepalive頁面快取元件快取UX快取元件
- Vue專案全域性配置頁面快取,實現按需讀取快取Vue快取
- 頁面之間傳遞資料
- SpringMVC之返回頁面資料SpringMVC
- 微信小程式之資料快取微信小程式快取
- H5禁用頁面快取的方法H5快取
- Ehcache 整合Spring 使用頁面、物件快取Spring物件快取
- .NetCore之介面快取NetCore快取
- Spring中整合Ehcache使用頁面、物件快取Spring物件快取
- 使用伺服器端控制AJAX頁面快取伺服器快取
- vue+element-ui中獲取頁面資料VueUI
- 利用XMLHTTP 從其他頁面獲取資料 (轉)XMLHTTP
- ASP.NET 頁面間資料傳遞方法ASP.NET
- .NET 快取快取
- 清空微信瀏覽器清除快取debug頁面瀏覽器快取
- apache cache-control設定頁面快取Apache快取
- React通過redux快取列表資料以及滑動位置,回退時恢復頁面狀態ReactRedux快取
- 阿里一面:關於【快取穿透、快取擊穿、快取雪崩、熱點資料失效】問題的解決方案阿里快取穿透
- Vue SSR服務端渲染之資料快取Vue服務端快取
- Django 頁面快取的cache_key是如何生成的Django快取
- 將頁面設定為不能夠被快取程式碼快取
- 關於瀏覽器快取問題(圖片更換後,頁面仍優先讀取快取)瀏覽器快取