微軟PDC2009直擊:改進(jìn)ASP.NET 4運(yùn)行時(shí)
對(duì)于ASP.NET 4大家還是有很多期待的,本文將為大家講述的是在微軟PDC2009大會(huì)上關(guān)于改進(jìn)ASP.NET 4運(yùn)行時(shí)部分的內(nèi)容,希望對(duì)大家有所幫助。
#T#
在近期舉辦的PDC 09大會(huì)中,ASP.NET團(tuán)隊(duì)的程序經(jīng)理Stefan Schackow展示了ASP.NET 4在運(yùn)行時(shí)方面的改進(jìn)。改進(jìn)主要圍繞“性能”和“可擴(kuò)展性”兩個(gè)方面進(jìn)行,具體表現(xiàn)三點(diǎn):新的資源監(jiān)視選項(xiàng)、會(huì)話狀態(tài)以及輸出緩存的擴(kuò)展能力。
對(duì)于一個(gè)Web服務(wù)器來(lái)說(shuō),CPU和內(nèi)存占用量是兩個(gè)較為重要的性能指標(biāo),而兩者相比之下,內(nèi)存相對(duì)又更容易成為瓶頸。自從IIS 6引入了“應(yīng)用程序池”的概念開始,多個(gè)ASP.NET應(yīng)用程序便可以工作在單個(gè)進(jìn)程之中。但是在這種情況下,我們就很難通過(guò)性能監(jiān)視器來(lái)獲得某個(gè)特定的Web應(yīng)用程序所占用的系統(tǒng)資源,這有時(shí)會(huì)讓問(wèn)題的定位變得困難重重。由于CLR 4可以獲得某個(gè)單獨(dú)的應(yīng)用程序域所占用的CPU,以及堆上托管內(nèi)存的數(shù)量,于是在ASP.NET 4中引入了一個(gè)名為“應(yīng)用程序域資源管理(AppDomain Resource Management,ARM)”的功能,它會(huì)檢測(cè)并預(yù)估單個(gè)Web應(yīng)用程序資源占用的趨勢(shì),并將各種數(shù)據(jù)開放給性能計(jì)數(shù)器。
在ASP.NET 4中,ARM功能默認(rèn)并不會(huì)開放。ARM功能無(wú)法通過(guò)修改單獨(dú)應(yīng)用程序的web.config文件打開,你需要去系統(tǒng)的.NET配置目錄中修改Aspnet.config文件,在
在會(huì)話狀態(tài)(Session State)使用方面,ASP.NET 4也作出了有效的改進(jìn)。Stefan表示,客戶中使用會(huì)話狀態(tài)的ASP.NET應(yīng)用程序數(shù)量之多超過(guò)了他的想象,尤其是跨進(jìn)程(Out of Process)的Session使用方式更是影響Web應(yīng)用程序性能的主要因素之一。因此,ASP.NET 4利用.NET中的壓縮功能,對(duì)跨進(jìn)程的會(huì)話狀態(tài)進(jìn)行了壓縮,包括SQL Server和會(huì)話狀態(tài)服務(wù)器——而這一切只需要在web.config中進(jìn)行配置即可。進(jìn)行壓縮之后可以節(jié)省1/3到2/3的流量,不過(guò)會(huì)帶來(lái)一些Web服務(wù)器的CPU壓力。
目前,ASP.NET運(yùn)行時(shí)會(huì)根據(jù)當(dāng)前請(qǐng)求的Http Handler是否實(shí)現(xiàn)IRequireSessionState接口來(lái)判斷是否啟用Session。在ASP.NET 4中,開發(fā)人員可以通過(guò)編程接口來(lái)控制某個(gè)請(qǐng)求是否啟用會(huì)話狀態(tài)。此外,ASP.NET 4還提供了“部分會(huì)話狀態(tài)(Partial Session State)”的功能,即只加載會(huì)話狀態(tài)指定key的數(shù)據(jù),這除了有效減少會(huì)話狀態(tài)的通信開銷外,也提供了額外的擴(kuò)展能力。例如,ASP.NET團(tuán)隊(duì)打算在AppFabric分布式緩存(其前身為Velocity)正式發(fā)布后,基于AppFabric構(gòu)建一個(gè)新的Session State Provider。
ASP.NET4在輸出緩存(Output Cache)上也增加了一些擴(kuò)展點(diǎn),主要可以讓開發(fā)人員為控件和請(qǐng)求級(jí)別的緩存定制存儲(chǔ)機(jī)制,例如磁盤,分布式緩存,甚至是云中,而在目前的ASP.NET中,所有數(shù)據(jù)都只能緩存在進(jìn)程的內(nèi)存中。這個(gè)擴(kuò)展機(jī)制支持緩存的絕對(duì)過(guò)期(Absolute Expiration)時(shí)間,文件依賴,和靜態(tài)替換和驗(yàn)證回調(diào)功能,不過(guò)為了保證緩存實(shí)現(xiàn)的通用性,它不支持相對(duì)過(guò)期(Sliding Expiration)時(shí)間和其他形式的依賴。與會(huì)話狀態(tài)一樣,在AppFabric發(fā)布之后,ASP.NET團(tuán)隊(duì)也會(huì)提供相應(yīng)的Ouput Cache Provider,不過(guò)按照計(jì)劃這會(huì)在ASP.NET 4 RTM之后才會(huì)發(fā)布了。Stefan表示,這些額外的Provider擴(kuò)展都會(huì)作為開源項(xiàng)目托管在CodePlex網(wǎng)站上。
***,基于IIS 7.5的“預(yù)熱”功能,ASP.NET 4可以讓IIS 7.5自動(dòng)運(yùn)行web.config中指定的頁(yè)面。Stefan表示,這個(gè)功能并不會(huì)給程序性能帶來(lái)提高,只是讓用戶避免遭遇程序冷啟動(dòng)所帶來(lái)的延遲效果。