1. 程式人生 > >ASP.Net 更新頁面輸出快取的幾種方法

ASP.Net 更新頁面輸出快取的幾種方法

ASP.Net 自帶的快取機制對於提高頁面效能有至關重要的作用,另一方面,快取的使用也會造成資訊更新的延遲。如何快速更新快取資料,有時成了困擾程式設計師的難題。根據我的使用經驗,總結了下面幾種方法,概括了常見的幾種情況,如有更好的方法歡迎補充。

(1)程式碼級快取(物件快取) Cache 物件

Cache 物件提供程式碼級的快取,功能強大,可操作性強。更新這種快取的方法很簡單,只要呼叫 Cache.Remove(key) 方法就可以清除指定的快取。程式碼如下:
HttpRuntime.Cache.Remove(cacheEnmu.Key.ToString());
下列程式碼清空所有 Cache 快取:
IDictionaryEnumerator cacheEnmu = HttpRuntime.Cache.GetEnumerator();
while (cacheEnmu.MoveNext())
{
      HttpRuntime.Cache.Remove(cacheEnmu.Key.ToString());
}

(2)頁面級快取 OutputCache

相對 Cache 物件,頁面級的 OutputCache 的使用要容易得多,且無需改動頁面程式碼,只要在頁面頂部增加 <%@ OutputCache %> 宣告就可以快取當前頁的所有內容。當然有利必有弊,OutputCache 只提供有限的幾個引數,當需要清除快取時就不如 Cache 物件那麼靈活。不過仍然有辦法,.Net 提供了 RemoveOutputCacheItem() 方法來清空頁面級輸出快取,使用方法如下:
HttpResponse.RemoveOutputCacheItem(fname);
//fname 是待清除快取頁面的絕對路徑,如 /article/read.asp
x

(3)使用者控制元件級快取 OutputCache

使用者控制元件級快取和頁面級快取類似,不同的是可以只快取頁面區域性的使用者控制元件,對於不需要整頁快取的頁面來說是種不錯的解決方案。可是清空頁面快取的 RemoveOutputCacheItem() 方法對使用者控制元件卻無效。 .net 沒有提供直接清空使用者控制元件輸出快取的方法。可以採用 OutputCache 依賴項變通處理OutputCache 有一個 VaryByCustom 引數,用於為快取指定自定義的依賴項,當該項內容變動時就會更新快取。 要使用 VaryByCustom 引數需要重寫 Global.asax 的 GetVaryByCustomString()
方法
,簡單的程式碼如下:
//arg 是系統傳入的自定義變數名,需要在下面進行判斷
//DataCache 是一個快取類,這裡用於存取 Cache 物件,當更新該Cache物件時,頁面快取同時更新





public override string GetVaryByCustomString(HttpContext context, string arg) {
  if(arg == "ucCacheFlag")
  {
   Object _flag = DataCache.GetCache("ucCacheFlag"); if(_flag == null) { _flag = DateTime.Now.Ticks.ToString(); DataCache.SetCache( "ucCacheFlag", _flag, DateTime.Now.AddMinutes(CommonValue.CacheTime), TimeSpan.Zero); } return _flag.ToString(); } return base.GetVaryByCustomString(context, arg); }
同時在使用者控制元件的頭部宣告中加入:
<%@ OutputCache Duration="1800" VaryByCustom="ucCacheFlag" %>
//ucCacheFlag 就是在GetVaryByCustomString()中判斷的字串
只需在程式中更新 key 為 ucCacheFlag 的 Cache,頁面輸出快取也會相應更新。 可以在 GetVaryByCustomString() 中判斷多個關鍵字,以控制不同的使用者控制元件輸出快取。 ---------另一方法-------------- ASP.NET輸出快取的使用網上已經有很多例子了,這裡主要介紹下如何在後臺管理中移除快取。 1.基於頁面快取 對於頁面:Default.aspx 如果頁面頂部新增: <%@ OutputCache Duration="60" VaryByParam="none" %> 在後臺管理中要移除很簡單: System.Web.HttpResponse.RemoveOutputCacheItem(Page.ResolveUrl("Default.aspx")); 2.基於控制元件 對於控制元件WebUserControl.ascx 如果在頂部添加了 <%@ OutputCache Duration="60" VaryByParam="none" Shared="true"%> 在後臺管理中要實現的話有點麻煩,在部落格園的博問請朋友們解答,查爾斯提供了一種解決方法。 實現如下: (1)新增VaryByCustom項,值為Cashgroupclass。 <%@ OutputCache Duration="60" VaryByParam="none" Shared="true" VaryByCustom="Cashgroupclass" %> (2) 在Global.asax 中重寫 GetVaryByCustomString 方法,程式碼如下: 程式碼
public override string GetVaryByCustomString(HttpContext context, string arg)
{
   if (arg == "Cashgroupclass")
   {
       Cache objCache = HttpRuntime.Cache;
       Object _flag = objCache["Cashgroupclass"];
       if (_flag == null)
       {
           _flag = DateTime.Now.Ticks.ToString();
           objCache.Insert("Cashgroupclass", _flag);
       }
       return _flag.ToString();
   }
   return base.GetVaryByCustomString(context, arg);
} (3)在後臺管理的移除頁面新增如下程式碼: Cache objCache = HttpRuntime.Cache;
if (objCache["Cashgroupclass"] != null)
{
    objCache.Remove("Cashgroupclass");
} 當然,您也可以藉助這個方法實現控制元件的快取更新。對了,查爾斯貼的程式碼中有使用DataCache類,是個自己寫的類,可以參考DataCache ,不過裡面過載引數對不上。那就加一個吧。 程式碼
public static void SetCache(string CacheKey, object objObject, DateTime absoluteExpiration, TimeSpan slidingExpiration)
{
      HttpRuntime.Cache.Insert(CacheKey, objObject, null, absoluteExpiration, slidingExpiration);
} 最後,感謝朋友們對我的幫助。

相關推薦

ASP.Net 更新頁面輸出快取方法

ASP.Net 自帶的快取機制對於提高頁面效能有至關重要的作用,另一方面,快取的使用也會造成資訊更新的延遲。如何快速更新快取資料,有時成了困擾程式設計師的難題。根據我的使用經驗,總結了下面幾種方法,概括了常見的幾種情況,如有更好的方法歡迎補充。 (1)程式碼級快取(物件快取)

ASP.NET : 重寫頁面輸出內容的2方式

轉載請註明出處 http://blog.csdn.net/fujie724 正常的網頁輸出到客戶端,通常包含了<html><head><body>。這些內容一般已經在aspx檔案裡寫好了。 但有的時候,我們希望徹底改變頁面輸出的內容,使

asp.net MVC html.ActionLink的參數格式

class cti span 生成 get 傳遞 文字 targe classname 一 Html.ActionLink("linkText","actionName") 該重載的第一個參數是該鏈接要顯示的文字,第二個參數是對應的控制器的方法, 默認控制器為當前頁面的控制

ASP.Net Web API 輸出快取 轉載 -- Output caching in ASP.NET Web API

一.Nuget安裝相關dll  Web API 2 : Install-Package Strathweb.CacheOutput.WebApi2 Web API 1 : Install-Package Strathweb.CacheOutput

ASP.NET Core 中介軟體的實現方式

前言 ASP.NET Core 中 HTTP 管道使用中介軟體組合處理的方式, 換句人話來說, 對於寫程式碼的人而言,一切皆中介軟體. 業務邏輯/資料訪問/等等一切都需要以中介軟體的方式來呈現. 那麼我們必須學會如何實現自定義中介軟體 這裡劃重點,必考 這裡我們介紹下中介軟體的幾種實現方式... 匿名函式 通

JS跳轉頁面常用的方法

class define bst top color defined rip dex text 第一種:(常用) <script language="javascript" type="text/javascript"> window.location.

Asp.net MVC Razor輸出字符串方法(js中嵌入razor)

del 方式 註意 標簽 字符串方法 .net 輸出 text mod @{ Model p = new Model(); //輸出名稱和年齡 //1.第一種方式 @:姓名[email protected] //

Android中使用非同步執行緒更新UI檢視的方法

在Android中子執行緒是不能更新ui的。 所以我們要通過其他方式來動態改變ui檢視, 1、runOnUiThreadactivity提供的一個輕量級更新ui的方法,在Fragment需要使用的時候要用getActivity.runOnUiThread開啟執行緒 這種方法最簡單,方便更新一些不需要判斷的

基礎面試題之 —— CSS實現簡單頁面佈局的方法

頁面佈局是前端面試中CSS部分經常考到的問題,本文列舉幾種簡單頁面佈局的方法: 絕對定位 + margin float inline-block flex 附加:響應式佈局 其中幾種方法在CSS程式碼上有相似之處,也有侷限或是需要特殊注意的地方,下文具體指出。

字串反向輸出方法

1、遞迴呼叫方式實現無符號數反向輸出 C語言實現(DEV c++4.9.9.2執行通過) [cpp]  #include<stdio.h>     void reverse_print(unsigned long num)  {      if(num==

dot net連線Sybase資料庫的方法

  最近搞了個電網公司的專案。因為他們的資料庫是Sybase12.5.1,所以就簡單學習了一下Sybase資料庫。但發現網上關於它的資料很少,我是費了好大的勁才把Sybase資料庫連線和亂碼給搞定了。總結一下   一、Net連線Sybase12.5.1資料庫幾種連線方式和配置   1、ODBC 方式   .

修改.NET程式或DLL的方法

http://hi.baidu.com/expertsearch/blog/item/3763489498ffe9027bf48092.html本文目的是回答一個朋友關於修改程式集的留言,都是比較簡單的修改方式,不涉及脫殼等。1:    利用ILASM和ILDASM我們先建立如下測試程式:namespace

ASP.Net頁面傳值的方式

webconfig local 區別 重啟 Nid 傳遞對象 app too BE 大致概括一下,ASP.NET 頁面之間傳遞值得方式大致可以分為如下幾種:Request.QueryString["name"],Request.Form("name"),Session,Co

asp.net分割字串的方法

在編寫程式中,經常要用到分割的方法來處理一些字串。這裡總結了幾種常用的分割方法: 下面一一介紹一下: 1、最簡單最常用的方法,以一個指定的字元進行的分割 string s="abcdeabcdeabcde"; string[] sArray=s.Split

ASP.NET WebForm頁面內容輸出方式

這次我們談的話題是“Web Form頁面上輸出內容的方式”。這其實是一個非常舊的話題了,因為本文的內容甚至可以運用於ASP.NET 1.1之上。不過這個話題的適用範圍很廣,因為即使是目前最新的ASP.NET MVC框架,它的預設檢視引擎依舊是基於ASP.NET WebForm的(如Page,Control,M

asp.net web頁面匯出word的一方式,自己記錄用

前臺:div內可新增內容<div id="divText" runat="server" style="text-align: center"> </div>後臺:利用Rende

ASP.NET-GridView資料繫結的方法

前提:頁面需要顯示多個表中的欄位,幾個表之間通過欄位保持聯絡 方法一:直接進行級聯查詢,並將結果集通過SqlDataAdapter填充DataSet,之後將DataTable的DataView繫結到GridView的資料來源,: //連線資料庫,並獲得返回結果; public dataset GetR

asp.net 前後臺頁面互動資料的四方案,非ajax

asp.net 前後臺頁面互動資料的四種方案 ,第五種方案通過aspx.cs中的靜態方法+WebMethod進行處理已經介紹http://blog.csdn.net/qq_18551329/artic

禁用頁面快取方法(靜態和動態)

 1、在Asp頁面首部<head>加入    以下是引用片段:   Response.Buffer   =   True       Response.ExpiresAbsolute   =   Now()   -   1       Response.Exp

.Html+Asp+asp.net(C#)禁止瀏覽器快取頁面方法-禁止快取

在我找到的許多方案中,其中有一種建議禁止頁面快取。 具體是使用伺服器端指令碼,如下所示:  <% Response.Buffer = true; Response.ExpiresAbsolute = DateTime.Now - new TimeSpan(1, 0, 0); Response.E