国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - ASP.NET教程 - asp.net 提高網(wǎng)站速度及如何利用緩存

asp.net 提高網(wǎng)站速度及如何利用緩存

2019-07-02 15:05ASP.NET之家 ASP.NET教程

ASP.NET提供三種主要形式的緩存:頁面級(jí)輸出緩存、用戶控件級(jí)輸出緩存(或稱為片段緩存)和緩存API。

輸出緩存和片段緩存的優(yōu)點(diǎn)是非常易于實(shí)現(xiàn),在大多數(shù)情況下,使用這兩種緩存就足夠了。而緩存API則提供了額外的靈活性(實(shí)際上是相當(dāng)大的靈活性),可用于在應(yīng)用程序的每一層利用緩存。本文全面介紹了這三種緩存技術(shù)在系統(tǒng)各層中的應(yīng)用。 

  在ASP.NET提供的許多特性中,緩存支持無疑是我最欣賞的特性,我這樣說當(dāng)然是有充分理由的。相比ASP.NET的所有其他特性,緩存對(duì)應(yīng)用程序的性能具有最大的潛在影響,利用緩存和其他機(jī)制,ASP.NET開發(fā)人員可以接受使用開銷很大的控件(例如,DataGrid)構(gòu)建站點(diǎn)時(shí)的額外開銷,而不必?fù)?dān)心性能會(huì)受到太大的影響。為了在應(yīng)用程序中最大程度地利用緩存,您應(yīng)該考慮在所有程序級(jí)別上都實(shí)現(xiàn)緩存的方法。 
  Steve的緩存提示 
  盡早緩存;經(jīng)常緩存 
  您應(yīng)該在應(yīng)用程序的每一層都實(shí)現(xiàn)緩存。向數(shù)據(jù)層、業(yè)務(wù)邏輯層、UI或輸出層添加緩存支持。內(nèi)存現(xiàn)在非常便宜-因此,通過以智能的方式在整個(gè)應(yīng)用程序中實(shí)現(xiàn)緩存,可以獲得很大的性能提高。 
  緩存可以防止許多過失 
  緩存是一種無需大量時(shí)間和分析就可以獲得“足夠良好的”性能的方法。這里再次強(qiáng)調(diào),內(nèi)存現(xiàn)在非常便宜,因此,如果您能通過將輸出緩存30秒,而不是花上一整天甚至一周的時(shí)間嘗試優(yōu)化代碼或數(shù)據(jù)庫就可以獲得所需的性能,您肯定會(huì)選擇緩存解決方案(假設(shè)可以接受30秒的舊數(shù)據(jù))。緩存正是那些利用20%付出獲得80%回報(bào)的特性之一,因此,要提高性能,應(yīng)該首先想到緩存。不過,如果設(shè)計(jì)很糟糕,最終卻有可能帶來不良的后果,因此,您當(dāng)然也應(yīng)該盡量正確地設(shè)計(jì)應(yīng)用程序。但如果您只是需要立即獲得足夠高的性能,緩存就是您的最佳選擇,您可以在以后有時(shí)間的時(shí)候再重新設(shè)計(jì)應(yīng)用程序。 
  頁面級(jí)輸出緩存 
  作為最簡(jiǎn)單的緩存形式,輸出緩存只是在內(nèi)存中保留為響應(yīng)請(qǐng)求而發(fā)送的HTML的副本。其后再有請(qǐng)求時(shí)將提供緩存的輸出,直到緩存到期,這樣,性能有可能得到很大的提高(取決于需要多少開銷來創(chuàng)建原始頁面輸出-發(fā)送緩存的輸出總是很快,并且比較穩(wěn)定)。 
  實(shí)現(xiàn) 
  要實(shí)現(xiàn)頁面輸出緩存,只要將一條OutputCache指令添加到頁面即可。 
  <%@ OutputCache Duration="60" VaryByParam="*" %> 
  如同其他頁面指令一樣,該指令應(yīng)該出現(xiàn)在ASPX頁面的頂部,即在任何輸出之前。它支持五個(gè)屬性(或參數(shù)),其中兩個(gè)是必需的。 
每個(gè)頁面都寫上這句話有些啰嗦,可以在web.config里配置如下: 
代碼 
復(fù)制代碼代碼如下:

<caching> 
<outputCacheSettings> 
<outputCacheProfiles> 
<add name="Cache30Seconds" duration="30" 
varyByParam="none" /> 
</outputCacheProfiles> 
</outputCacheSettings> 
</caching> 


在頁面中引用代碼如下: 

<%@ OutputCache CacheProfile="Cache30Seconds"%> 

  Duration 必需屬性。頁面應(yīng)該被緩存的時(shí)間,以秒為單位。必須是正整數(shù)。 
  Location 指定應(yīng)該對(duì)輸出進(jìn)行緩存的位置。如果要指定該參數(shù),則必須是下列選項(xiàng)之一:Any、Client、Downstream、None、Server或ServerAndClient。 
  VaryByParam 必需屬性。Request中變量的名稱,這些變量名應(yīng)該產(chǎn)生單獨(dú)的緩存條目。“none”表示沒有變動(dòng)。“*”可用于為每個(gè)不同的變量數(shù)組創(chuàng)建新的緩存條目。變量之間用“;”進(jìn)行分隔。 
  VaryByHeader 基于指定的標(biāo)頭中的變動(dòng)改變緩存條目。 
  VaryByCustom 允許在global.asax中指定自定義變動(dòng)(例如,“Browser”)。 
  利用必需的Duration和VaryByParam選項(xiàng)的組合可以處理大多數(shù)情況。例如,如果您的產(chǎn)品目錄允許用戶基于categoryID和頁變量查看目錄頁,您可以用參數(shù)值為“categoryID;page”的VaryByParam將產(chǎn)品目錄緩存一段時(shí)間(如果產(chǎn)品不是隨時(shí)都在改變,一小時(shí)還是可以接受的,因此,持續(xù)時(shí)間是3600秒)。這將為每個(gè)種類的每個(gè)目錄頁創(chuàng)建單獨(dú)的緩存條目。每個(gè)條目從其第一個(gè)請(qǐng)求算起將維持一個(gè)小時(shí)。 
  VaryByHeader和VaryByCustom主要用于根據(jù)訪問頁面的客戶端對(duì)頁面的外觀或內(nèi)容進(jìn)行自定義。同一個(gè)URL可能需要同時(shí)為瀏覽器和移動(dòng)電話客戶端呈現(xiàn)輸出,因此,需要針對(duì)不同的客戶端緩存不同的內(nèi)容版本。或者,頁面有可能已經(jīng)針對(duì)IE進(jìn)行了優(yōu)化,針對(duì)Netscape或Opera則應(yīng)取消這種優(yōu)化功能。后一個(gè)例子非常普遍,我們將提供一個(gè)說明如何實(shí)現(xiàn)此目標(biāo)的示例: 
  示例:VaryByCustom用于支持瀏覽器自定義 
  為了使每個(gè)瀏覽器都具有單獨(dú)的緩存條目,VaryByCustom的值可以設(shè)置為“browser”。此功能已經(jīng)內(nèi)置在緩存模塊中,并且將針對(duì)每個(gè)瀏覽器名稱和主要版本插入單獨(dú)的頁面緩存版本。 
  <%@ OutputCache Duration="60" VaryByParam="None" VaryByCustom="browser"%> 
 片段緩存,用戶控件輸出緩存 
 更多選項(xiàng) 



  除了上面提到的依賴項(xiàng),我們還可以指定項(xiàng)的優(yōu)先級(jí)(依次為low、high、NotRemovable,它們是在System.Web.Caching.CacheItemPriority枚舉中定義的)以及當(dāng)緩存中的對(duì)象到期時(shí)調(diào)用的CacheItemRemovedCallback函數(shù)。大多數(shù)時(shí)候,默認(rèn)的優(yōu)先級(jí)已經(jīng)足夠了-緩存引擎可以正常完成任務(wù)并處理緩存的內(nèi)存管理。CacheItemRemovedCallback選項(xiàng)考慮到一些很有趣的可能性,但實(shí)際上它很少使用。不過,為了說明該方法,我將提供它的一個(gè)使用示例: 

  CacheItemRemovedCallback示例 
復(fù)制代碼代碼如下:

System.Web.Caching.CacheItemRemovedCallback callback = new System.Web.Caching.CacheItemRemovedCallback (OnRemove); 
Cache.Insert("key",myFile,null, 
 System.Web.Caching.Cache.NoAbsoluteExpiration, 
 TimeSpan.Zero, 
 System.Web.Caching.CacheItemPriority.Default, callback); 
. . . 
public static void OnRemove(string key, object cacheItem, 
 System.Web.Caching.CacheItemRemovedReason reason) 

 AppendLog("The cached value with key ''" + key + 
"'' was removed from the cache. Reason: " + 
 reason.ToString()); 

  該示例將使用AppendLog()方法中定義的任何邏輯來記錄緩存中的數(shù)據(jù)到期的原因。通過在從緩存中刪除項(xiàng)時(shí)記錄這些項(xiàng)并記錄刪除的原因,您可以確定是否在有效地使用緩存或者您是否可能需要增加服務(wù)器上的內(nèi)存。注意,callback是一個(gè)靜態(tài)(在VB中為Shared)方法,建議使用該方法的原因是,如果不使用它,保存回調(diào)函數(shù)的類的實(shí)例將保留在內(nèi)存中,以支持回調(diào)(對(duì)static/Shared方法則沒有必要)。 

  該特性有一個(gè)潛在的用處-在后臺(tái)刷新緩存的數(shù)據(jù),這樣用戶永遠(yuǎn)都不必等待數(shù)據(jù)被填充,但數(shù)據(jù)始終保持相對(duì)較新的狀態(tài)。但實(shí)際上,此特性并不適用于當(dāng)前版本的緩存API,因?yàn)樵趶木彺嬷袆h除緩存的項(xiàng)之前,不觸發(fā)或不完成回調(diào)。因此,用戶將頻繁地發(fā)出嘗試訪問緩存值的請(qǐng)求,然后發(fā)現(xiàn)緩存值為空,不得不等待緩存值的重新填充。我希望在未來的ASP.NET版本中看到一個(gè)附加的回調(diào),可以稱為CachedItemExpiredBut 

  NotRemovedCallback,如果定義了該回調(diào),則必須在刪除緩存項(xiàng)之前完成執(zhí)行。 

  緩存數(shù)據(jù)引用模式 

  每當(dāng)我們嘗試訪問緩存中的數(shù)據(jù)時(shí),都應(yīng)該考慮到一種情況,那就是數(shù)據(jù)可能已經(jīng)不在緩存中了。因此,下面的模式應(yīng)該普遍適用于您對(duì)緩存的數(shù)據(jù)的訪問。在這種情況下,我們假定已緩存的數(shù)據(jù)是一個(gè)數(shù)據(jù)表。 
復(fù)制代碼代碼如下:

public DataTable GetCustomers(bool BypassCache) 

 string cacheKey = "CustomersDataTable"; 
 object cacheItem = Cache[cacheKey] as DataTable; 
 if((BypassCache) || (cacheItem == null)) 
 { 
  cacheItem = GetCustomersFromDataSource(); 
  Cache.Insert(cacheKey, cacheItem, null, 
  DateTime.Now.AddSeconds(GetCacheSecondsFromConfig(cacheKey), TimeSpan.Zero); 
 } 
 return (DataTable)cacheItem; 

  關(guān)于此模式,有以下幾點(diǎn)需要注意: 

  1) 某些值(例如,cacheKey、cacheItem和緩存持續(xù)時(shí)間)是一次定義的,并且只定義一次。 

  2) 可以根據(jù)需要跳過緩存-例如,當(dāng)注冊(cè)一個(gè)新客戶并重定向到客戶列表后,最好的做法可能就是跳過緩存,用最新數(shù)據(jù)重新填充緩存,該數(shù)據(jù)包括新插入的客戶。 

  3) 緩存只能訪問一次。這種做法可以提高性能,并確保不會(huì)發(fā)生NullReferenceExceptions,因?yàn)樵擁?xiàng)在第一次被檢查時(shí)是存在的,但第二次檢查之前就已經(jīng)到期了。 

  4) 該模式使用強(qiáng)類型檢查。C#中的“as”運(yùn)算符嘗試將對(duì)象轉(zhuǎn)換為類型,如果失敗或該對(duì)象為空,則只返回null(空)。 

  5) 持續(xù)時(shí)間存儲(chǔ)在配置文件中。在理想的情況下,所有的緩存依賴項(xiàng)(無論是基于文件的,或是基于時(shí)間的,還是其他類型的依賴項(xiàng))都應(yīng)該存儲(chǔ)在配置文件中,這樣就可以進(jìn)行更改并輕松地測(cè)量性能。我還建議您指定默認(rèn)緩存持續(xù)時(shí)間,而且,如果沒有為所使用的cacheKey指定持續(xù)時(shí)間,就讓GetCacheSecondsFromConfig()方法使用該默認(rèn)持續(xù)時(shí)間。 

  與本文相關(guān)的代碼示例(CachedDemo.msi,參見本書示例光盤)是一個(gè)helper類,它將處理上述所有情況,可以只書寫一行或兩行代碼訪問緩存的數(shù)據(jù)。 

  小結(jié) 

  緩存可以使應(yīng)用程序的性能得到很大的提高,因此在設(shè)計(jì)應(yīng)用程序以及對(duì)應(yīng)用程序進(jìn)行性能測(cè)試時(shí)應(yīng)該予以考慮。應(yīng)用程序總會(huì)或多或少地受益于緩存,當(dāng)然有些應(yīng)用程序比其他應(yīng)用程序更適合使用緩存。對(duì)ASP.NET提供的緩存選項(xiàng)的深刻理解是任何ASP.NET開發(fā)人員應(yīng)該掌握的重要技巧。 


  緩存整個(gè)頁面通常并不可行,因?yàn)轫撁娴哪承┎糠质轻槍?duì)用戶定制的。不過,頁面的其他部分是整個(gè)應(yīng)用程序共有的。這些部分最適合使用片段緩存和用戶控件進(jìn)行緩存。此外,菜單和其他布局元素,尤其是那些從數(shù)據(jù)源動(dòng)態(tài)生成的元素,也可以用這種方法進(jìn)行緩存。 

  如果需要,可以按以下條件選擇需要緩存的控件: 

  (1)某控件的屬性已改變 

  (2)由頁面級(jí)輸出緩存所支持的任何一種頁面或控件狀態(tài)改變 

  一旦對(duì)某些控件進(jìn)行了緩存,使用它們的幾百個(gè)頁面就可以共享這些控件,而不再需要為每個(gè)頁面保留單獨(dú)的控件緩存版本。 

  實(shí)現(xiàn) 

  片段緩存使用的語法與頁面級(jí)輸出緩存一樣,但其應(yīng)用于用戶控件(.ascx文件)而不是Web窗體(.aspx文件)。除了Location屬性,對(duì)于OutputCache在Web窗體上支持的所有屬性,用戶控件也同樣支持。用戶控件還支持名為VaryByControl的OutputCache屬性,該屬性將根據(jù)用戶控件(通常是頁面上的控件,例如,DropDownList)的成員的值改變?cè)摽丶木彺妗H绻付薞aryByControl,可以省略VaryByParam。最后,在默認(rèn)情況下,對(duì)每個(gè)頁面上的每個(gè)用戶控件都單獨(dú)進(jìn)行緩存。不過,如果一個(gè)用戶控件不隨應(yīng)用程序中的頁面改變,并且在所有頁面都使用相同的名稱,則可以設(shè)置參數(shù)Shared的值為“true”,該參數(shù)將使用戶控件的緩存版本供引用該控件的所有頁面使用。 

  示例 

<%@ OutputCache Duration="60" VaryByParam="*" %> 

  該示例將緩存用戶控件60秒,并且將針對(duì)查詢字符串的每個(gè)變動(dòng)、針對(duì)此控件所在的每個(gè)頁面創(chuàng)建單獨(dú)的緩存條目。 

<%@ OutputCache Duration="60" VaryByParam="none" 
VaryByControl="CategoryDropDownList" %> 

  該示例將緩存用戶控件60秒,并且將針對(duì)CategoryDrop 

  DownList控件的每個(gè)不同的值、針對(duì)此控件所在的每個(gè)頁面創(chuàng)建單獨(dú)的緩存條目。 

<%@ OutputCache Duration="60" VaryByParam="none" VaryByCustom="browser" 
Shared="true" %> 

  最后,該示例將緩存用戶控件60秒,并且將針對(duì)每個(gè)瀏覽器名稱和主要版本創(chuàng)建一個(gè)緩存條目。然后,每個(gè)瀏覽器的緩存條目將由引用此用戶控件的所有頁面共享(只要所有頁面都用相同的ID引用該控件即可)。 

  緩存API,使用Cache對(duì)象 

  頁面級(jí)和用戶控件級(jí)輸出緩存的確是一種可以迅速而簡(jiǎn)便地提高站點(diǎn)性能的方法,但是在ASP.NET中,緩存的真正靈活性和強(qiáng)大功能是通過Cache對(duì)象提供的。使用Cache對(duì)象,您可以存儲(chǔ)任何可序列化的數(shù)據(jù)對(duì)象,基于一個(gè)或多個(gè)依賴項(xiàng)的組合來控制緩存條目到期的方式。這些依賴項(xiàng)可以包括自從某對(duì)象被緩存后經(jīng)過的時(shí)間、自從某對(duì)象上次被訪問后經(jīng)過的時(shí)間、對(duì)文件或文件夾的更改以及對(duì)其他緩存對(duì)象的更改,在略作處理后還可以包括對(duì)數(shù)據(jù)庫中特定表的更改。 



  在Cache中存儲(chǔ)數(shù)據(jù) 

  在Cache中存儲(chǔ)數(shù)據(jù)的最簡(jiǎn)單的方法就是使用一個(gè)鍵為其賦值,就像HashTable或Dictionary對(duì)象一樣: 

Cache["key"] = "value"; 

  這種做法將在緩存中存儲(chǔ)項(xiàng),同時(shí)不帶任何依賴項(xiàng),因此它不會(huì)到期,除非緩存引擎為了給其他緩存數(shù)據(jù)提供空間而將其刪除。要包括特定的緩存依賴項(xiàng),可使用Add()或Insert()方法。其中每個(gè)方法都有幾個(gè)重載。Add()和Insert()之間的唯一區(qū)別是,Add()返回對(duì)已緩存對(duì)象的引用,而Insert()沒有返回值(在C#中為空,在VB中為Sub)。 

  示例 

Cache.Insert("key", myXMLFileData, new 
System.Web.Caching.CacheDependency(Server.MapPath("users.xml"))); 

  該示例可將文件中的xml數(shù)據(jù)插入緩存,無需在以后請(qǐng)求時(shí)從文件讀取。CacheDependency的作用是確保緩存在文件更改后立即到期,以便可以從文件中提取最新數(shù)據(jù),重新進(jìn)行緩存。如果緩存的數(shù)據(jù)來自若干個(gè)文件,還可以指定一個(gè)文件名的數(shù)組。 

Cache.Insert("dependentkey", myDependentData, new 
System.Web.Caching.CacheDependency(new string[] {}, new string[] 
{"key"})); 

  該示例可插入鍵值為“key”的第二個(gè)數(shù)據(jù)塊(取決于是否存在第一個(gè)數(shù)據(jù)塊)。如果緩存中不存在名為“key”的鍵,或者如果與該鍵相關(guān)聯(lián)的對(duì)象已到期或被更新,則“dependentkey”的緩存條目將到期。 

Cache.Insert("key", myTimeSensitiveData, null, 
DateTime.Now.AddMinutes(1), TimeSpan.Zero); 

  絕對(duì)到期:此示例將對(duì)受時(shí)間影響的數(shù)據(jù)緩存一分鐘,一分鐘過后,緩存將到期。注意,絕對(duì)到期和滾動(dòng)到期(見下文)不能一起使用。 

Cache.Insert("key", myFrequentlyAccessedData, null, 
System.Web.Caching.Cache.NoAbsoluteExpiration, 
TimeSpan.FromMinutes(1)); 

  動(dòng)態(tài)滾動(dòng)到期:此示例將緩存一些頻繁使用的數(shù)據(jù)。數(shù)據(jù)將在緩存中一直保留下去,除非數(shù)據(jù)未被引用的時(shí)間達(dá)到了一分鐘。注意,動(dòng)態(tài)滾動(dòng)到期和絕對(duì)到期不能一起使用。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 日本激情综合网 | 亚洲精品一区二区三区四区高清 | 黄色片免费观看 | 欧美日韩一区二区在线 | 国产日韩欧美 | 日韩一区精品 | 91亚洲精品一区 | 在线观看av大片 | 午夜国产在线 | 色花av | 国产高清一区 | 日韩中文在线 | 国产激情视频 | 久久久精品 | 亚洲欧美另类久久久精品2019 | 欧美成人精品一区二区三区在线看 | 一区二区三区日本 | 成人羞羞网站 | 欧美大片黄 | 高清一区二区 | 日韩一区二区三区电影在线观看 | 伊人伊人| 日日夜夜精品免费视频 | 可以在线观看的av网站 | 一级黄色毛片 | 国产精品久久久久久亚洲调教 | 黄色直接看 | 亚洲一区二区三区在线免费观看 | 欧美中文字幕一区二区三区亚洲 | 久久久激情视频 | 久久综合成人精品亚洲另类欧美 | av在线视 | 国产特黄大片aaaaa毛片 | 日韩av视屏 | 精品天堂 | аⅴ资源新版在线天堂 | 毛片免费毛片一级jjj毛片 | 成人午夜视频在线观看 | 在线免费观看色视频 | 国产精品第十页 | 日本不卡在线观看 |