国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

ASP.NET的緩存技術

2024-07-10 12:57:39
字體:
來源:轉載
供稿:網友
介紹
大量的網站頁面是采用動態的方式,根據用戶提交的不同請求創建生成頁面。正如我們所知的,動態頁面有助于根據用戶要求來提供定制的動態內容。動態頁面也利于獲取在數據庫中每時每刻更新的資料。缺點是為每個用戶請求生成同一頁面增加了系統開銷。

為克服此問題,一些網站用頁面生成引擎對所有頁面生成html靜態頁面。但這樣生成的頁面對所有用戶的請求內容都是相同。

asp.net 提供了緩存技術有助于我們最大程度地解決這個問題。它能緩存輸出的頁面,保存在存儲器當中,緩存用戶請求的內容。緩存的特點可以根據不方式來定制的。

緩存一個頁面
為緩存一個頁面輸出的內容,我們要在面面頂部指定一個 @outputcache 命令。語法如下所示:

<%@ outputcache duration=5 varybyparam="none" %>

如你所見,這條指令有兩個屬性。他們是:

duration - 被緩存輸出的內容有效期是多少秒。在時間超過指定的有效期后,過期的緩存內容會刪除,并會在下次用戶請求中重新調用頁面生成緩存內容。再次的緩存內容過10秒后此過程又會重復。
varybyparam - 這個屬性是必須的,并且指明查詢字串參數不同使緩存產生變化。在上面的代碼片斷中,我們指定 varybyparam 屬性是 “none” ,這意味著不論傳遞的查詢字串參數如何不同所返回的頁面內容是相同的。
如果對同一頁面的兩次請求含不同的查詢字串參數,如:.../pagecachingbyparam.aspx?id=12 和.../pagecachingbyparam.aspx?id=15 ,這應該生成不同的頁面內容,指令應該是:

<%@ outputcache duration=10 varybyparam="id" %>

對這樣兩種不同請求的頁面內容每一個都會被緩存 duration 屬性指定的時間長度。。

為了指定多個參數的情形,要使用分號來分隔參數名稱。如果我們指定 varybyparam 屬性為“*”,緩存內容會因傳遞的不同查詢字串參數而不同。

一些動態頁面要根據不同的瀏覽來生成不同的內容。在這種情況下就要規定緩存輸出內容要因不同瀏覽器而不同。@outputcache 命令要改為:

<%@ outputcache duration=5 varybyparam="id" varybycustom="browser" %>

這條指令不僅讓緩存輸出內容因瀏覽器不同而不同,而且也會因瀏覽器版本不同而不同,如 ie5、ie 6、netscape 4、netscape 6 都會獲得不同輸出的緩存版本。


緩存局部頁面
有時我們可能只是想緩存一個頁面的一小部分。例如,我們可能用這樣的頁面,對所有瀏覽用戶都有同樣的內容,這個頁面有一個標題。這個標題可能是某個文本/圖象組成,并且每天數據都可能改變。在這種情況下,我們就會只想緩存這個標題一天的有效期。

解決方法是把標題內容放入一個用戶控件當中,然后指定這個用戶控件應該被緩存。這個技術被稱為局部緩存(fragment caching)。

為了指定應該被緩存的用戶控件,我們利用 @outputcache 指令,就象整個頁面緩存的用法一樣。

<%@ outputcache duration=10 varybyparam="none" %>

在上面的指令中,用戶控件緩存有效期是 duration 屬性指定的時間(10 秒)。不論查詢字串和瀏覽器類型/版本如何,緩存輸出的內容是相同的。。


數據緩存
asp.net 也支持作為對象類型數據的緩存。我們可以把對象存儲在內存中,在我們應用程序的不同動態頁面中使用它們。利用 cache 類可以實現這個特點。緩存的生存周期與應用程序的相同。對象可以以鍵值對(name value pairs)的形式儲存于緩存當中。如下所示插入一個字串進緩存:

cache["name"]="smitha";

這個存儲的字串值可以象這樣得到:

if (cache["name"] != null)
label1.text= cache["name"].tostring();

為把對象插入緩存中,可以使用 cache 類的 add 方法或者不同版本的 insert 方法。這些方法可能允許我們使用這個 cache 類提供的更強大功能,下面是利用了 insert 方法的一個重載:

cache.insert("name", strname,
new cachedependency(server.mappath("name.txt"),
datetime.now.addminutes(2), timespan.zero);

頭兩個參數是是鍵名和被插入的對象。第三個參數是 cachedependency 類型,幫我們對名為 name.txt 文件設置值的依賴項。因此一旦這個文件發生改變,在緩存中的這個值會被刪除。我們可以指定 “null” 值來表明沒有依賴項。第四個參數指定了從緩存刪除這個值的時間。最后一個參數是緩存過期時間可調的參數,它指明了從最后一次訪問緩存時間到它被刪除的時間間隔。

當可用系統內存不多時,緩存自動從內存中刪除使用少的項目。這個過程被稱為凈化(scavenging)。我們可以為添加進緩存中的項目指定優先級,以便某些項目能得到優先處理:

cache.insert("name", strname,
new cachedependency(server.mappath("name.txt"),
datetime.now.addminutes(2), timespan.zero,
cacheitempriority.high, null);

枚舉類型 cacheitempriority 給成員設置不同的優先級。cacheitempriority.high 給項目分配了個高優先級,以使該項目減少被緩存刪除的可能性。


要點
如果你還是老的 asp 頁面并且利用 response.expires 屬性緩存頁面輸出,那么他們也可以象 asp.net 支持這個屬性一樣被保留。
cache 類的 insert 方法會用相同鍵名的項目覆蓋任何已存在項目。
cacheitempriority.notremovable 優先值可以與 cache.insert 方法一起用于設置一個項目的優先級,以便這個項目不會在凈化期間從緩存中被刪除

結語
本文中,我盡可能對 asp.net 的緩存技術多個可選方便提供一個總的概括。為保持本文的簡短扼要沒有提供詳細的解釋和說明。

在一個啟用緩存的含子控件嵌套風格中可用局部緩存。我還沒有測試如何利用這一點,因此也就沒有包括這個技巧的說明。同時 cache 類的 insert 方法也就沒有在此討論了。我希望本文對讀者而言是一個研究多姿多彩的 asp.net 世界的一個良好的開端。

說明
本文樣例源碼下載。源代碼中提供了各種緩存技術實例。使用 index.htm 頁面可以看到所有例子的列表。


歷史
february 23, 2004 - first version

  • 本文來源于網頁設計愛好者web開發社區http://www.html.org.cn收集整理,歡迎訪問。
  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 沙坪坝区| 靖边县| 双牌县| 九江县| 张北县| 陆丰市| 焉耆| 县级市| 绍兴市| 华亭县| 南川市| 长葛市| 离岛区| 田林县| 额尔古纳市| 内乡县| 泾阳县| 云和县| 鹤山市| 临夏市| 霍邱县| 新龙县| 台南县| 民丰县| 宁河县| 林芝县| 中西区| 安义县| 五常市| 万年县| 邹平县| 临颍县| 佛坪县| 勃利县| 大埔区| 出国| 滦南县| 夏邑县| 穆棱市| 宽甸| 宽甸|