當前位置:首頁 » 文件管理 » 緩存行和頁

緩存行和頁

發布時間: 2023-01-19 09:35:54

Ⅰ .net帶有參數的頁面怎麼進行緩存,緩存後可瀏覽正確頁面

ASP.NET 提供三種主要形式的緩存:頁面緩存、用戶控制項輸出緩存和緩存 API。

頁面輸出緩存作為最簡單的緩存形式,將已經生成的動/靜太頁面全部內容保存在伺服器內容中。當再有請求時,系統將緩存中的相關數據直接輸出,直到緩存數據過期。在這個過程中,緩存不再要再次經過頁面處理生命周期。這樣可以縮短請求響應時間,提高應用程序性能。顯然,頁面輸出緩存適用於不需要頻繁更新數據,而佔用大量時間和資源才能編譯生成的頁面。

實現頁面輸出緩存,通常可以用以下兩種方法:

一、使用@ OutputCache指令

使用@ OutputCache指令,能夠實現對頁面輸出緩存的一般性需要。@ OutputCache指令在ASP.NET頁或者頁中包含的用戶控制項的頭部聲明。這種方式非常方便,只需幾個簡單的屬性設置,就能夠實現頁面的輸出緩存策略。

二、使用HttpCacheability類

該類主要包含用於設置緩存特定的HTTP標頭的方法和用於控制ASP.NET頁面輸出緩存的方法。與.NET Framework 1.x中的HttpCachePolicy類相比,.NET Framework 2.0中的HttpCachePolicy類得到了擴充和發展。

使用這兩種方法,我們可以實現下列功能:

1、使用參數對頁的各個版本進行緩存

使用 ASP.NET,您可以根據指定的 HTTP 標頭的值對某頁的多個版本進行緩存。當請求頁時,您可以指定按傳遞到應用程序的單個標頭、多個標頭或所有標頭進行緩存。

根據 HTTP 標頭值以聲明方式對某頁的各個版本進行緩存

A、 在 ASP.NET 頁中,在 @ OutputCache 指令中包括必需的 Duration 和 VaryByParam 或 VaryByControl 屬性。必須將 Duration 屬性設置為大於零的整數。如果希望只按 HTTP 標頭值進行緩存,則必須將 VaryByParam 屬性設置為「None」。

B、 在 @ OutputCache 指令中,包含 VaryByHeader 屬性,將其值設置為要作為改變緩存內容的依據的 HTTP 標頭的名稱。

下面的示例將頁緩存 60 秒,並根據隨 Accept-Language HTTP 標頭傳遞的值設置要緩存的頁的版本:

<%@ OutputCache Duration="60" VaryByParam="None" VaryByHeader="Accept-Language" %>

注意:如果要根據多個標頭改變緩存的內容,請以分號 (;) 作為分隔符包括標頭名稱的列表。如果要根據所有標頭值改變緩存的內容,請將 VaryByHeader 屬性設置為星號 (*)。

根據 HTTP 標頭值以編程方式對某頁的各個版本進行緩存

A、 在頁的 Page_Load 方法中,對頁的 Response 對象的 Cache 屬性調用 SetCacheability 和 SetExpires 方法。

B、 將 VaryByHeaders 屬性中的 HTTP 標頭值設置為 true。

下面的代碼示例演示如何為有不同的 Accept-Language HTTP 標頭值的請求,將某頁的多個版本緩存一分鍾之久。

protected void Page_Load(object sender, EventArgs e)

{

Response.Cache.SetExpires(DateTime.Now.AddMinutes(1d));

Response.Cache.SetCacheability(HttpCacheability.Public);

Response.Cache.SetValidUntilExpires(true);

Response.Cache.VaryByHeaders["Accept-Language"] = true;

}

注意:如果要根據多個標頭改變緩存的內容,需要在 VaryByHeaders 屬性中設置多個值。如果要根據所有標頭改變緩存的內容,請將 VaryByHeaders["VaryByUnspecifiedParameters"] 設置為 true。

2、使用請求瀏覽器緩存頁的各個版本

基於瀏覽器類型以聲明方式緩存頁的多個版本

A、 在 ASP.NET 頁中,包括一個具有必需的 Duration 以及 VaryByParam 或 VaryByControl 屬性的 @ OutputCache 指令。必須將 Duration 屬性設置為大於零的整數。如果希望僅按瀏覽器類型進行緩存,請將 VaryByParam 屬性設置為「None」。

B、 在 @ OutputCache 指令中,包括 VaryByCustom 屬性並將其設置為「browser」。下面的示例將導致持續緩存該頁達 10 秒。輸出將因瀏覽器類型而異。

<%@ OutputCache Duration="10" VaryByParam="None" VaryByCustom="browser" %>

基於瀏覽器類型以編程方式緩存頁的多個版本

A、 在頁代碼中,對頁的 Response 屬性的 Cache 屬性調用 SetExpires 和 SetCacheability 方法。

B、 調用 SetVaryByCustom 方法,在 custom 參數中傳遞值「browser」。

下面的代碼示例演示如何持續緩存頁的多個版本達 1 分鍾。輸出將因發出請求的瀏覽器的類型而異。

protected void Page_Load(object sender, EventArgs e)

{

Response.Cache.SetExpires(DateTime.Now.AddMinutes(1d));

Response.Cache.SetCacheability(HttpCacheability.Public);

Response.Cache.SetValidUntilExpires(true);

Response.Cache.SetVaryByCustom("browser");

}

3、 使用自定義字元串對頁的各個版本進行緩存

根據自定義字元串對頁輸出的多個版本進行緩存

A、 在 ASP.NET 頁中包括 @ OutputCache 指令,該指令帶有必需的 Duration 和 VaryByParam 屬性。必須將 Duration 屬性設置為大於零的整數。如果不想使用 VaryByParam 屬性提供的功能,則必須將其值設置為「無」。

B、 若要以聲明方式設置自定義字元串,請在 @ OutputCache 指令中包括 VaryByCustom 屬性,並將該屬性設置為您要作為進行不同輸出緩存行為的依據的字元串。

下面的指令根據自定義字元串「minorversion」改變頁輸出。

<%@ OutputCache Duration="10" VaryByParam="None" VaryByCustom="minorversion" %>

1. 若要以編程方式設置自定義字元串,請調用 SetVaryByCustom 方法,並將要使用的自定義字元串傳遞給它。

下面的代碼示例演示如何將自定義字元串設置為「minorversion」。

Response.Cache.SetVaryByCustom("minorversion");

在應用程序的 Global.asax 文件中,重寫 GetVaryByCustomString 方法以指定自定義字元串的輸出緩存行為。

被重寫的方法接受您在 VaryByCustom 屬性或 SetVaryByCustom 方法中設置的字元串,作為它的 arg 參數。例如,有些頁可能根據請求瀏覽器的次版本進行緩存。對於這些頁,可以將 VaryByCustom 屬性設置為「minorversion」。然後,在被重寫的 GetVaryByCustomString 方法中,可以檢查 arg 參數,並根據 arg 參數的值是否為「minorversion」返回不同的字元串。

下面的代碼示例演示一個 Global.asax 文件,其中的 GetVaryByCustomString 方法被重寫。

<%@ Application language="C#" %>

<script runat="server">

public override string GetVaryByCustomString(HttpContext context,

string arg)

{

if(arg == "minorversion")

{

return "Version=" +

context.Request.Browser.MinorVersion.ToString();

}

else

{

return "";

}

}

</script>

Ⅱ 請教CPU的cache中關於line,block,index等的理解

  1. - cache子系統: 通常按照功能可以分成SRAM, tag RAM, cache controller三部分. 實際設計時, 三部分可以由多個晶元來實現, 也可以合並入單個晶元中.

    - SRAM: 靜態隨機存儲器, 與DRAM相對, 是cpu cache中用來承載數據的內存塊. SRAM的大小決定了cache的大小.

    - tag RAM: 一小片用來存儲數據地址的SRAM, cache緩存了哪些主存中的數據, tag RAM中就會存儲哪些地址.

    - cache controller: 緩存控制器, 主要功能有: 實現snoop和snarf; 更新SRAM和tag RAM; 實現寫策略; 確定內存訪問請求是否能夠被緩存. (並不是所有主存都有緩存需求, 哪些主存區域不需要緩存與設計有關. 例如, PC平台上主存中用於視頻顯示的內存區域是不需要緩存的); 確定內存訪問請求是否命中cache

    - 緩存頁(cache page): 主存(也就是通常所說的內存, 存儲器類型是DRAM)被分成多個大小相等的片段, 每一個片段稱為一個cache page. cache page的大小依賴於cpu cache的大小以及cpu cache是如何組織的. 注: 這里的page與分頁模式下的內存頁沒有直接的關系, 是不同的概念.

    - 緩存行(cache line): 每一個cache page又被分成更小的片段, 每一個片段稱為一個cache line. 通常翻譯成緩存線, 而我一般翻譯成緩存行. cache line的大小(有時候也稱作寬度)取決於cpu以及cache的設計.

    - cache的組織結構通常分成三種: 直接映射(direct map)型, 全關聯(fully-associative)型, 組關聯(set associative)型. 現在流行的英特爾x86_64一般採用的是組關聯型cache.

    - 全關聯(fully-associative): 全關聯cache僅僅使用line而不採用page, 主存和cache都被劃分成等大的line, 主存中的某一line可以存入任意一cache line中. 全關聯cache的優點是性能高, 缺點是實現起來電路復雜, 復雜性源於需要確定被請求的數據是否已經在cache中, 被請求的地址需要與存儲在tag RAM中的每一個地址進行比較, 這需要大量的比較器, 從而增加了大容量cache的實現復雜度以及價格. 全關聯結構通常僅僅用在小容量cache中, 典型容量不超過4K

    -直接映射(direct map): 主存被劃分成多個cache page, 每一個cache page的大小等於cache的大小. 僅僅把的一些特定的內存line存入同一個cache line中, 例如把所有page中的line 0存儲cache line 0中. page中的cache 1存儲在cache line 1中, ...; 直接映射cache是三種cache結構中最簡單的一種. 在直接映射cache中被請求的地址只需要與tag RAM中的一個地址相比較. 優點: 由於直接映射cache的簡單性, 它的價格也比其它類型的cache便宜很多; 缺點: 靈活性很低, 導致性能也低很多, 尤其是在cache page之間跳轉的時候. (考慮page 0和page 1的line 0都映射到cache line 0, 而程序又試圖交替訪問page 0和page 1中的line 0)

    - 組關聯(set associative): cache被劃分成多個等大小(典型的值是2, 4, 8, 16, ...)的部分, 每一個部分稱作是一個 cache way; 而主存則會被劃分成多個cache page, 每個cache page的大小等於一個cache way的大小. 然後每一個cache way被當成是一個小的直接映射cache. 由於比較器的數目等於cache way的數目, 因此組關聯cache比全關聯cache要簡單, 價格也比全關聯cache便宜. 一個兩路組關聯cache只需要兩個比較器.

    有了以上概念就應該比較容易理解一些文章中對cpu cache的描述了。 如果仍然覺得理解有困難, 我們可以再進一步粗略的理解: 把cache看成是一個M行N列的二維表格, 每一個單元格就是一個cache line; 每一行就是一個set, 由橫向的N個cache line構成; 每一列就是一個way, 由縱向的M行cache line構成; 當M為1時, 就是全關聯cache; 當N為1時, 就是直接映射cache.

    沒有完全回答你的問題, 不過應該能夠輔助你理解你所看的文檔了。

Ⅲ 原子操作的實現原理

我們一起來聊一聊在Inter處理器和java里是如何實現原子操作的。

32位IA-32處理器使用基於 對緩存加鎖或匯流排加鎖 的方式來實現多處理器之間的原子操作

首先處理器會自動保證基本的內存操作的原子性。 處理器保證從系統內存當中讀取或者寫入一個位元組是原子的,意思是當一個處理器讀取一個位元組時,其他處理器不能訪問這個位元組的內存地址。奔騰6和最新的處理器能自動保證單處理器對同一個緩存行里進行16/32/64位的操作是原子的,但是復雜的內存操作處理器不能自動保證其原子性,比如跨匯流排寬度,跨多個緩存行,跨頁表的訪問。但是處理器提供匯流排鎖定和緩存鎖定兩個機制來保證復雜內存操作的原子性。

第一個機制是通過匯流排鎖保證原子性。 如果多個處理器同時對共享變數進行讀改寫(i++就是經典的讀改寫操作)操作,那麼共享變數就會被多個處理器同時進行操作,這樣讀改寫操作就不是原子的,操作完之後共享變數的值會和期望的不一致,舉個例子:如果i=1,我們進行兩次i++操作,我們期望的結果是3,但是有可能結果是2。如下圖

處理器使用匯流排鎖就是來解決這個問題的。 所謂匯流排鎖就是使用處理器提供的一個LOCK#信號,當一個處理器在匯流排上輸出此信號時,其他處理器的請求將被阻塞住,那麼該處理器可以獨占使用共享內存。

「緩存鎖定」指內存區域如果被緩存在處理器的緩存行中,並且在Lock操作期間被鎖定,那麼當它執行鎖操作回寫到內存時,處理器不需要在匯流排上聲言LOCK#信號,而是修改內部的內存地址,通過緩存一致性機制保證操作的原子性。
例外:當操作的數據不能被緩存在處理器內部,或操作的數據跨多個緩存行,處理器會調用匯流排鎖定。

在java中可以通過鎖和循環CAS的方式來實現原子操作。
CAS

ABA問題
循環時間長開銷大
只能保證一個共享變數的原子操作

原子操作的實現原理
聊聊並發(五)原子操作的實現原理

Ⅳ 請教大師,頁面讀取Access資料庫表太多,頁面打開速度太慢,怎麼解決呢,用緩存行不,怎麼用

緩存查詢結果把。
application("緩存對象名")=要緩存緩存的內容。
用的時候直接 response.write application("緩存對象名")

如果表裡數據量很大,建議改用SQL

Ⅳ 如何使用緩存

  • 緩存是分層次的,下面是計算機緩存山:

  • cpu緩存策略:

    寄存器中計算數據,而數據存儲在內存中,由於cpu和內存之間的性能逐漸增大,系統設計者在cpu和內存之間插入了3層的高速緩存。高速緩存有三個層級,就是整個計算機緩存系統的一個小縮影。

Ⅵ 匯編語言顯示緩存區的內容怎麼顯示

首先你要知道,當你把字元對應的ASCII碼寫入顯示緩沖區的時候它就會被屏幕所顯示出來。
顯示緩沖區一共有8頁(這里只用第一頁就夠了,所以我就提一下)
每頁的可以存儲2000個字,一個字的高位存放的是需要顯示的字元,低位存放的是字元的顏色
也就是說一頁最多顯示2000個字元了 比如說 0位:41,1位:02 這里41所在的位是0位(偶數位)所以它將被轉換成對應的字元顯示在屏幕上 而緊跟0位後面的是奇數位(1位),它裡面的內容會轉換成控制0位字元和背景等顏色信息,以後的都是這樣,比如第2位和第3位配對,第4位和第5位配對,第4位是字元信息,第5位就是控制第4位字元信息的顏色。
而每行可以放80個字,也就是80個字元(字元位+顏色位=160個位元組),而每頁又可以顯示25行
我們可以用 行數*160=內存中相對於行數所在的地址(因為一行是160個位元組,所以乘以160)
我們可以用 列數*2=內存中相對於列數所在的地址 (因為每行用2個位元組分別存放字元和顏色)
如果說用SI存放行數,DI存放列數,而你需要在屏幕的第13行40列顯示數據的時候,它的偏移地址就是:si*160+di*2(這個是字元存放的位置),如果你要設置顏色的話 只要向後面偏移一位就可以了:si*160+di*2+1
說了這么多,我來寫個具體的給你看看吧,不會的看我寫的備注
需要向屏幕的 13行40列顯示字元X,顏色為(黑底綠色)
assume cs:code
code segment
start:
mov bx,0b800h
mov es,bx ;用ES段存放顯示緩沖區
mov bx,13*160+40*2 ;在編譯的時候編譯器會幫你計算出顯示的偏移地址
mov es:[bx],'X' ;在顯示緩沖區的內存中寫入字元'X'的ascii碼
mov es:[bx+1],2h ;這里向後移一位,控制『X』的顏色

mov ax,4c00h
int 21h
code ends
end start
回答完畢 QQ544980123 一起交流

Ⅶ 磁碟塊 內存頁 cache行 三者大小相等嗎

三者可以沒有任何關系。
磁碟塊,格式化時建立的。內存頁,操作系統需要考慮的東西。Cache行,操作系統需要考慮的內容。它們可以一樣,也可以毫無關系。

Ⅷ 谷歌瀏覽器怎麼查看緩存

谷歌瀏覽器查看緩存步驟如下:

1、在電腦桌面上面點擊Chrome圖標,啟動瀏覽器。

Ⅸ 緩存行與偽共享

        由於CPU的速度遠遠大於內存速度,為提高CPU的速度,CPU中加入了緩存(cache),緩存分為三級L1,L2,L3。級別越小越接近CPU, 速度更快, 同時容量越小。每個緩存裡面是以緩存行為單位存儲的。緩存行是2的整數冪個連續位元組,一般為32-256個位元組,最常見的緩存行大小是64個位元組。

        CPU 訪問內存時,首先查詢 cache 是否已緩存該數據。如果有,則返回數據,無需訪問內存;如果不存在,則需把數據從內存中載入 cache,最後返回給CPU。若cache命中率高,這會極大提高性能。

        一個long類型佔8個位元組,8個long類型共64位元組可以填充一個緩存行,為使對比明顯,建立一個8 * 1000000的long數組,一次順序存取,一次跳躍存取,對比運行時間:

順序存取:

運行結果如下:

跳躍存取:

運行結果如下:

在進行了1000萬次存取下,差距還是比較明顯的。

        假設有兩個變數X,Y,多線程訪問中,運行於CPU1的線程訪問X,運行於CPU2的線程訪問Y,盡管兩個變數之間沒有任何關系,但是在線程之間仍然需要同步。比如CPU1的線程改變了X,同一行的Y及時沒有更新也會失效,導致CPU2訪問Y時緩存無法命中,同理,CPU2對Y的更新也會影響到X,反反復復,影響性能。

        為了避免這種情況,一種可行的做法是填充緩存行,使一個緩存行中,只有一個變數實際是有效的。

        聲明一個對象demo,對象頭佔8位元組,一個long類型佔8位元組,共16個位元組,連續創建4個實例,多半在同一個緩存行中,起四個線程分別對四個實例的value做大量的存取操作查看其運行時間。然後在demo填充6個8位元組的long,填滿64位元組,重新運行查看其運行時間。

未填充運行結果如下:

四個線程互不幹擾,運行時間大致相當,均與未填充時第一個啟動線程相當。

在Java8中提供了@sun.misc.Contended來避免偽共享,在運行時需要設置JVM啟動參數-XX:-RestrictContended

更詳細介紹參考: https://www.jianshu.com/p/7f89650367b8

Ⅹ 請高手給我說一下如何解決網頁或FLASH的緩存問題

在HTML中加入如下信息
<meta http-equiv="pragram" content="no-cache">
禁止瀏覽器從本地緩存中調閱頁面。
網頁不保存在緩存中,每次訪問都刷新頁面。
<meta http-equiv="cache-control" content="no-cache, must-revalidate">
同上面意思差不多,必須重新載入頁面
<meta http-equiv="expires" content="0">
網頁在緩存中的過期時間為0,一旦網頁過期,必須從伺服器上重新訂閱。

熱點內容
socket編程php 發布:2024-05-03 20:12:50 瀏覽:207
坦洲郵政局可以解壓嗎 發布:2024-05-03 20:09:55 瀏覽:731
二級程序編譯答案 發布:2024-05-03 18:41:35 瀏覽:654
領動自動精英版是哪個配置 發布:2024-05-03 18:37:30 瀏覽:151
java編譯器中cd什麼意思 發布:2024-05-03 18:36:00 瀏覽:390
傳奇伺服器如何刷錢 發布:2024-05-03 18:36:00 瀏覽:978
安卓版twitter怎麼注冊 發布:2024-05-03 18:28:05 瀏覽:894
Python邏輯優先順序 發布:2024-05-03 18:26:14 瀏覽:268
linux查看svn密碼 發布:2024-05-03 18:12:47 瀏覽:805
地鐵逃生怎麼進入游戲安卓 發布:2024-05-03 17:49:35 瀏覽:993