自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

概述ASP.NET緩存機(jī)制

開(kāi)發(fā) 后端
本文介紹ASP.NET緩存機(jī)制,作為.Net框架下開(kāi)發(fā)Web應(yīng)用程序的主打產(chǎn)品,ASP.NET充分考慮了緩存機(jī)制。通過(guò)某種方法提高整個(gè)Web系統(tǒng)的性能。

PetShop之ASP.NET緩存機(jī)制

如果對(duì)微型計(jì)算機(jī)硬件系統(tǒng)有足夠的了解,那么我們對(duì)于Cache這個(gè)名詞一定是耳熟能詳?shù)?。在CPU以及主板的芯片中,都引入了這種名為高速緩沖存儲(chǔ)器(Cache)的技術(shù)。因?yàn)镃ache的存取速度比內(nèi)存快,因而引入Cache能夠有效的解決CPU與內(nèi)存之間的速度不匹配問(wèn)題。硬件系統(tǒng)可以利用 Cache存儲(chǔ)CPU訪問(wèn)概率高的那些數(shù)據(jù),當(dāng)CPU需要訪問(wèn)這些數(shù)據(jù)時(shí),可以直接從Cache中讀取,而不必訪問(wèn)存取速度相對(duì)較慢的內(nèi)存,從而提高了 CPU的工作效率。軟件設(shè)計(jì)借鑒了硬件設(shè)計(jì)中引入緩存機(jī)制以改善整個(gè)系統(tǒng)的性能,尤其是對(duì)于一個(gè)數(shù)據(jù)庫(kù)驅(qū)動(dòng)的Web應(yīng)用程序而言,緩存的利用是不可或缺的,畢竟,數(shù)據(jù)庫(kù)查詢可能是整個(gè)Web站點(diǎn)中調(diào)用最頻繁但同時(shí)又是執(zhí)行最緩慢的操作之一,我們不能被它老邁的雙腿拖緩我們前進(jìn)的征程。緩存機(jī)制正是解決這一缺陷的加速器。

ASP.NET緩存機(jī)制概述

作為.Net框架下開(kāi)發(fā)Web應(yīng)用程序的主打產(chǎn)品,ASP.NET充分考慮了緩存機(jī)制。通過(guò)某種方法,將系統(tǒng)需要的數(shù)據(jù)對(duì)象、Web頁(yè)面存儲(chǔ)在內(nèi)存中,使得Web站點(diǎn)在需要獲取這些數(shù)據(jù)時(shí),不需要經(jīng)過(guò)繁瑣的數(shù)據(jù)庫(kù)連接、查詢和復(fù)雜的邏輯運(yùn)算,就可以“觸手可及”,如“探囊取物”般容易而快速,從而提高整個(gè)Web系統(tǒng)的性能。

ASP.NET提供了兩種基本的緩存機(jī)制來(lái)提供緩存功能。一種是應(yīng)用程序緩存,它允許開(kāi)發(fā)者將程序生成的數(shù)據(jù)或報(bào)表業(yè)務(wù)對(duì)象放入緩存中。另外一種緩存機(jī)制是頁(yè)輸出緩存,利用它,可以直接獲取存放在緩存中的頁(yè)面,而不需要經(jīng)過(guò)繁雜的對(duì)該頁(yè)面的再次處理。

應(yīng)用程序緩存其實(shí)現(xiàn)原理說(shuō)來(lái)平淡無(wú)奇,僅僅是通過(guò)ASP.NET管理內(nèi)存中的緩存空間。放入緩存中的應(yīng)用程序數(shù)據(jù)對(duì)象,以鍵/值對(duì)的方式存儲(chǔ),這便于用戶在訪問(wèn)緩存中的數(shù)據(jù)項(xiàng)時(shí),可以根據(jù)key值判斷該項(xiàng)是否存在緩存中。

放入在緩存中的數(shù)據(jù)對(duì)象其生命周期是受到限制的,即使在整個(gè)應(yīng)用程序的生命周期里,也不能保證該數(shù)據(jù)對(duì)象一直有效。ASP.NET可以對(duì)應(yīng)用程序緩存進(jìn)行管理,例如當(dāng)數(shù)據(jù)項(xiàng)無(wú)效、過(guò)期或內(nèi)存不足時(shí)移除它們。此外,調(diào)用者還可以通過(guò)CacheItemRemovedCallback委托,定義回調(diào)方法使得數(shù)據(jù)項(xiàng)被移除時(shí)能夠通知用戶。

在.Net Framework中,應(yīng)用程序緩存通過(guò)System.Web.Caching.Cache類實(shí)現(xiàn)。它是一個(gè)密封類,不能被繼承。對(duì)于每一個(gè)應(yīng)用程序域,都要?jiǎng)?chuàng)建一個(gè)Cache類的實(shí)例,其生命周期與應(yīng)用程序域的生命周期保持一致。我們可以利用Add或Insert方法,將數(shù)據(jù)項(xiàng)添加到應(yīng)用程序緩存中,如下所示:
Cache["First"] = "First Item";
Cache.Insert("Second", "Second Item");

我們還可以為應(yīng)用程序緩存添加依賴項(xiàng),使得依賴項(xiàng)發(fā)生更改時(shí),該數(shù)據(jù)項(xiàng)能夠從緩存中移除:
string[] dependencies = {"Second"};
Cache.Insert("Third", "Third Item",
new System.Web.Caching.CacheDependency(null, dependencies));

與之對(duì)應(yīng)的是緩存中數(shù)據(jù)項(xiàng)的移除。前面提到ASP.NET可以自動(dòng)管理緩存中項(xiàng)的移除,但我們也可以通過(guò)代碼編寫的方式顯式的移除相關(guān)的數(shù)據(jù)項(xiàng):
Cache.Remove("First");

相對(duì)于應(yīng)用程序緩存而言,頁(yè)輸出緩存的應(yīng)用更為廣泛。它可以通過(guò)內(nèi)存將處理后的ASP.NET頁(yè)面存儲(chǔ)起來(lái),當(dāng)客戶端再一次訪問(wèn)該頁(yè)面時(shí),可以省去頁(yè)面處理的過(guò)程,從而提高頁(yè)面訪問(wèn)的性能,以及Web服務(wù)器的吞吐量。例如,在一個(gè)電子商務(wù)網(wǎng)站里,用戶需要經(jīng)常查詢商品信息,這個(gè)過(guò)程會(huì)涉及到數(shù)據(jù)庫(kù)訪問(wèn)以及搜索條件的匹配,在數(shù)據(jù)量較大的情況下,如此的搜索過(guò)程是較為耗時(shí)的。此時(shí),利用頁(yè)輸出緩存就可以將***次搜索得到的查詢結(jié)果頁(yè)存儲(chǔ)在緩存中。當(dāng)用戶第二次查詢時(shí),就可以省去數(shù)據(jù)查詢的過(guò)程,減少頁(yè)面的響應(yīng)時(shí)間。

頁(yè)輸出緩存分為整頁(yè)緩存和部分頁(yè)緩存。我們可以通過(guò)@OutputCache指令完成對(duì)Web頁(yè)面的輸出緩存。它主要包含兩個(gè)參數(shù):Duration和VaryByParam。Duration參數(shù)用于設(shè)置頁(yè)面或控件進(jìn)行緩存的時(shí)間,其單位為秒。如下的設(shè)置表示緩存在60秒內(nèi)有效:
<%@ OutputCache Duration=“60“ VaryByParam=“none“ %>

只要沒(méi)有超過(guò)Duration設(shè)置的期限值,當(dāng)用戶訪問(wèn)相同的頁(yè)面或控件時(shí),就可以直接在緩存中獲取。
使用VaryByParam參數(shù)可以根據(jù)設(shè)置的參數(shù)值建立不同的緩存。例如在一個(gè)輸出天氣預(yù)報(bào)結(jié)果的頁(yè)面中,如果需要為一個(gè)ID為txtCity的TextBox控件建立緩存,其值將顯示某城市的氣溫,那么我們可以進(jìn)行如下的設(shè)置:
<%@ OutputCache Duration=”60” VaryByParam=”txtCity” %>

如此一來(lái),ASP.NET會(huì)對(duì)txtCity控件的值進(jìn)行判斷,只有輸入的值與緩存值相同,才從緩存中取出相應(yīng)的值。這就有效地避免了因?yàn)橹档牟煌鴮?dǎo)致輸出錯(cuò)誤的數(shù)據(jù)。

利用緩存機(jī)制對(duì)性能的提升非常明顯。通過(guò)ACT(Application Center Test)的測(cè)試,可以發(fā)現(xiàn)設(shè)置緩存后執(zhí)行的性能比未設(shè)置緩存時(shí)的性能足足提高三倍多。

引入緩存看來(lái)是提高性能的“***”解決方案,然而“金無(wú)足赤,人無(wú)完人”,緩存機(jī)制也有缺點(diǎn),那就是數(shù)據(jù)過(guò)期的問(wèn)題。一旦應(yīng)用程序數(shù)據(jù)或者頁(yè)面結(jié)果值發(fā)生的改變,那么在緩存有效期范圍內(nèi),你所獲得的結(jié)果將是過(guò)期的、不準(zhǔn)確的數(shù)據(jù)。我們可以想一想股票系統(tǒng)利用緩存所帶來(lái)的災(zāi)難,當(dāng)你利用錯(cuò)誤過(guò)期的數(shù)據(jù)去分析股市的風(fēng)云變幻時(shí),你會(huì)發(fā)現(xiàn)獲得的結(jié)果真可以說(shuō)是“失之毫厘,謬以千里”,看似大好的局面就會(huì)像美麗的泡沫一樣,用針一戳,轉(zhuǎn)眼就消失得無(wú)影無(wú)蹤。

那么我們是否應(yīng)該為了追求高性能,而不顧所謂“數(shù)據(jù)過(guò)期”所帶來(lái)的隱患呢?顯然,在類似于股票系統(tǒng)這種數(shù)據(jù)更新頻繁的特定場(chǎng)景下,數(shù)據(jù)過(guò)期的糟糕表現(xiàn)甚至比低效的性能更讓人難以接受。故而,我們需要在性能與數(shù)據(jù)正確性間作出權(quán)衡。所幸的是,.Net Framework 2.0引入了一種新的緩存機(jī)制,它為我們的“魚與熊掌兼得”帶來(lái)了技術(shù)上的可行性。

.Net 2.0引入的自定義緩存依賴項(xiàng),特別是基于MS-SQL Server的SqlCacheDependency特性,使得我們可以避免“數(shù)據(jù)過(guò)期”的問(wèn)題,它能夠根據(jù)數(shù)據(jù)庫(kù)中相應(yīng)數(shù)據(jù)的變化,通知緩存,并移除那些過(guò)期的數(shù)據(jù)。事實(shí)上,在PetShop 4.0中,就充分地利用了SqlCacheDependency特性。

SqlCacheDependency特性

SqlCacheDependency特性實(shí)際上是通過(guò)System.Web.Caching.SqlCacheDependency類來(lái)體現(xiàn)的。通過(guò)該類,可以在所有支持的SQL Server版本(7.0,2000,2005)上監(jiān)視特定的SQL Server數(shù)據(jù)庫(kù)表,并創(chuàng)建依賴于該表以及表中數(shù)據(jù)行的緩存項(xiàng)。當(dāng)數(shù)據(jù)表或表中特定行的數(shù)據(jù)發(fā)生更改時(shí),具有依賴項(xiàng)的數(shù)據(jù)項(xiàng)就會(huì)失效,并自動(dòng)從Cache中刪除該項(xiàng),從而保證了緩存中不再保留過(guò)期的數(shù)據(jù)。
由于版本的原因,SQL Server 2005完全支持SqlCacheDependency特性,但對(duì)于SQL Server 7.0和SQL Server 2000而言,就沒(méi)有如此幸運(yùn)了。畢竟這些產(chǎn)品出現(xiàn)在.Net Framework 2.0之前,因此它并沒(méi)有實(shí)現(xiàn)自動(dòng)監(jiān)視數(shù)據(jù)表數(shù)據(jù)變化,通知ASP.NET的功能。解決的辦法就是利用輪詢機(jī)制,通過(guò)ASP.NET進(jìn)程內(nèi)的一個(gè)線程以指定的時(shí)間間隔輪詢SQL Server數(shù)據(jù)庫(kù),以跟蹤數(shù)據(jù)的變化情況。

要使得7.0或者2000版本的SQL Server支持SqlCacheDependency特性,需要對(duì)數(shù)據(jù)庫(kù)服務(wù)器執(zhí)行相關(guān)的配置步驟。有兩種方法配置SQL Server:使用aspnet_regsql命令行工具,或者使用SqlCacheDependencyAdmin類。以上介紹ASP.NET緩存機(jī)制

【編輯推薦】

  1. 微軟發(fā)布ASP.NET MVC 2預(yù)覽版 多項(xiàng)功能更新
  2. ASP.NET服務(wù)器自定義控件安全準(zhǔn)則
  3. ASP.NET編程規(guī)范之編碼規(guī)范淺析
  4. 關(guān)于ASP.NET Session的一點(diǎn)認(rèn)識(shí)
  5. ASP.NET編程工具ASP.NET Web Matrix詳細(xì)介紹
責(zé)任編輯:佚名 來(lái)源: yesky
相關(guān)推薦

2009-08-17 16:59:36

ASP.NET緩存機(jī)制

2009-08-03 18:35:51

ASP.NET數(shù)據(jù)緩存

2009-07-22 17:45:35

ASP.NET教程

2009-07-28 17:17:19

ASP.NET概述

2009-07-22 16:17:39

ASP.NET AJA

2009-08-05 13:58:26

ASP.NET Mem

2009-07-23 16:55:55

ASP.NET特點(diǎn)

2009-07-27 15:52:21

ASP.NET特點(diǎn)ASP.NET概述

2009-07-29 13:04:59

2009-07-22 15:58:52

ASP.NET AJA

2009-07-23 10:52:38

2009-08-04 16:46:58

ASP.NET內(nèi)置Ht

2009-07-31 10:23:44

緩存頁(yè)面ASP.NET緩存

2009-08-05 17:54:04

ASP.NET運(yùn)行模式

2009-07-22 10:09:59

ASP.NET MVC

2009-07-28 11:09:02

ASP.NET狀態(tài)類型

2009-07-30 15:17:16

ASP.NET 2.0

2009-07-20 10:16:13

配置ASP.NET A

2009-07-29 14:35:34

頁(yè)面輸出緩存ASP.NET

2009-07-31 10:33:54

ASP.NET頁(yè)面輸出
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)