欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

怎么構(gòu)建高性能ASP.NET

本篇內(nèi)容主要講解“怎么構(gòu)建高性能ASP.NET”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“怎么構(gòu)建高性能ASP.NET”吧!

創(chuàng)新互聯(lián)2013年至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站制作、做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元淥口做網(wǎng)站,已為上家服務(wù),為淥口各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575

早期階段就要對(duì)應(yīng)用進(jìn)行負(fù)載測(cè)試

大多數(shù)開發(fā)者趨向在應(yīng)用開發(fā)完成后,集成測(cè)試和回歸測(cè)試通過(guò)后才進(jìn)行負(fù)載測(cè)試。盡管在開發(fā)完成后執(zhí)行一次負(fù)載測(cè)試好過(guò)不做,但是一旦完成了代碼的編寫,修復(fù)性能問(wèn)題就為時(shí)已晚了。這個(gè)問(wèn)題最常見的例子就是當(dāng)應(yīng)用程序在負(fù)載測(cè)試時(shí)不能正確響應(yīng)時(shí),就會(huì)考慮向外擴(kuò)展(增加更多的服務(wù)器)。有時(shí)這是不可能的,因?yàn)榇a不適合實(shí)現(xiàn)擴(kuò)展服務(wù)器。比如當(dāng)對(duì)象是存儲(chǔ)在Session中并不可序列化時(shí),這樣添加更多的web節(jié)點(diǎn)或者工作者進(jìn)程就是不可能的。如果你在開發(fā)的早期階段就發(fā)現(xiàn)你的應(yīng)用可能要部署到多臺(tái)服務(wù)器上,那么你應(yīng)該在配置和服務(wù)器的數(shù)量等方面都要讓測(cè)試環(huán)境和最終環(huán)境盡可能地接近,這樣你的代碼會(huì)更容易適應(yīng)。

使用高性能類庫(kù)

近來(lái)我在診斷web站點(diǎn)的性能問(wèn)題時(shí)發(fā)現(xiàn)了代碼中的一個(gè)熱點(diǎn)問(wèn)題:來(lái)自第三方web服務(wù)的JSON信息必須要被反序列化多次。那些Json信息是由Newtonsoft.Json反序列化的,并且證明了Newtonsoft.Json在反序列化時(shí)不是最快的類庫(kù),然后我們使用了一個(gè)更快的類庫(kù)(如ServiceStack)替代了Json.Net,并獲得了更好的結(jié)果。

如果我們?cè)谔暨x了Json.Net作為序列化類庫(kù)的早期階段就完成了負(fù)載測(cè)試,那么我們就會(huì)更早地發(fā)現(xiàn)性能問(wèn)題,我們就不必再代碼中做這么多的修改了,也不必再次完整地重新測(cè)試了。

你的應(yīng)用是CPU密集還是IO密集的?

在開始實(shí)現(xiàn)web應(yīng)用以及設(shè)計(jì)項(xiàng)目時(shí),你要首先考慮的一件事就是你的應(yīng)用是CPU密集的還是IO密集的?這對(duì)于了解擴(kuò)展應(yīng)用的策略是很重要的。

比如,如果你的應(yīng)用是CPU密集的,那么你可能想使用同步模式,并行處理等等。然而,對(duì)于一個(gè)有很多IO受限的操作(例如和外部web服務(wù)或者網(wǎng)絡(luò)資源如數(shù)據(jù)庫(kù)通訊)的產(chǎn)品,基于Task的異步模式可能對(duì)于向外擴(kuò)展更有幫助。此外,為了在未來(lái)的某天能夠創(chuàng)建Web Gardens和Web Farms,你可能想有一個(gè)集中式的緩存系統(tǒng),這樣就實(shí)現(xiàn)了跨越多個(gè)工作者進(jìn)程或服務(wù)的負(fù)載。

使用基于Task的異步模型,但要慎重

如果你的產(chǎn)品依賴許多IO受限的操作,或者包括了可能需要消耗寶貴的IIS線程等待一個(gè)操作完成的長(zhǎng)時(shí)間運(yùn)行的操作,你最好為ASP.NET MVC項(xiàng)目考慮使用基于Task的異步模式。

互聯(lián)網(wǎng)上有很多關(guān)于異步的ASP.NET MVC actions的手冊(cè)(比如這個(gè)),所以這篇博客盡量避免介紹關(guān)于異步的知識(shí)點(diǎn)。然而,必須指出ASP.NET (MVC)中傳統(tǒng)的同步action會(huì)造成IIS線程繁忙直到操作完成或請(qǐng)求處理完成。這意味著如果如果web應(yīng)用在等待一個(gè)外部的資源(如一個(gè)web服務(wù))響應(yīng),那么該線程將是繁忙的。.Net線程池中可以用于處理請(qǐng)求的線程數(shù)量也是有限的,因此,盡可能快地釋放線程是很重要的?;赥ask的異步action或方法會(huì)在請(qǐng)求處理后釋放該線程,然后從線程池中獲取新的線程,并使用該新的線程返回該action的結(jié)果。這樣,多個(gè)請(qǐng)求可以由多個(gè)線程處理,這會(huì)為你的應(yīng)用帶來(lái)更好的響應(yīng)。

雖然TAP模式對(duì)于適當(dāng)?shù)膽?yīng)用來(lái)說(shuō)很方便,但必須要慎重使用。當(dāng)你使用TAP設(shè)計(jì)或者實(shí)現(xiàn)一個(gè)項(xiàng)目時(shí),必須要注意幾個(gè)點(diǎn)(你可以點(diǎn)擊這里查看),然而,開發(fā)者使用async和await關(guān)鍵字面臨的最大挑戰(zhàn)是知道在這個(gè)上下文中他們必須略有不同地處理線程。比如,可以創(chuàng)建一個(gè)返回Task(如Task《Product》,博客園的markdown不支持單尖括號(hào))的方法,通常你可以對(duì)那個(gè)Task調(diào)用Run()方法或者只調(diào)用task.Result來(lái)迫使運(yùn)行該task,直到拿到結(jié)果。

分發(fā)緩存和會(huì)話(session)狀態(tài)

開發(fā)者在單個(gè)開發(fā)機(jī)器上構(gòu)建一個(gè)web應(yīng)用是非常常見的,并且也會(huì)假設(shè)該產(chǎn)品運(yùn)行在單個(gè)服務(wù)器上,然而對(duì)于面向大眾的web通常不是這樣的。它們往往被部署到一個(gè)叫做負(fù)載均衡之后的多個(gè)服務(wù)器上。盡管你仍然可以使用In-Proc(關(guān)于In-Proc和Out-Proc的知識(shí)點(diǎn)補(bǔ)充)的模式和粘性(sticky)Session將一個(gè)web應(yīng)用部署到多個(gè)服務(wù)器上(負(fù)載均衡器會(huì)將屬于相同session的所有請(qǐng)求定向到單個(gè)服務(wù)器),你可能必須保留session數(shù)據(jù)和緩存數(shù)據(jù)的多個(gè)副本。比如,如果你將產(chǎn)品部署到由4臺(tái)服務(wù)器組成的web farm上,并且你保持session數(shù)據(jù)為In-Proc,那時(shí)一個(gè)請(qǐng)求到達(dá)一個(gè)已經(jīng)包含緩存數(shù)據(jù)的機(jī)會(huì)是四分之一或25%,然而你如果在正確的地方使用了集中式緩存機(jī)制,那么為每個(gè)請(qǐng)求找到緩存條目的機(jī)會(huì)就是100%。這對(duì)于嚴(yán)重依賴緩存數(shù)據(jù)的web應(yīng)用是至關(guān)重要的。

使用集中式緩存機(jī)制(像App Fabric或redis)的另一個(gè)好處是對(duì)實(shí)際的產(chǎn)品實(shí)現(xiàn)主動(dòng)緩存系統(tǒng)的能力。主動(dòng)緩存機(jī)制可以用于在客戶端請(qǐng)求一個(gè)條目之前就可以將最受歡迎的條目預(yù)加載到緩存中。如果你使用實(shí)際的數(shù)據(jù)源來(lái)管理緩存同步時(shí),那么這會(huì)幫助你大幅地改善大數(shù)據(jù)驅(qū)動(dòng)應(yīng)用的性能。

創(chuàng)建Web Gardens

之前提到,在一個(gè)IO受限的web應(yīng)用中包含了很多長(zhǎng)時(shí)間運(yùn)行的操作(如web服務(wù)的調(diào)用),此時(shí)你可能想盡可能地釋放主線程。默認(rèn)情況下,每個(gè)web應(yīng)用運(yùn)行在一個(gè)主線程下,該主線程為保持web站點(diǎn)存活(alive)負(fù)責(zé),但不幸的是,當(dāng)它太忙的時(shí)候,你的站點(diǎn)就變得不能響應(yīng)了。給應(yīng)用添加更多的“主線程”是一種辦法,這是通過(guò)將更多的工作者進(jìn)程添加到IIS下的Web站點(diǎn)來(lái)實(shí)現(xiàn)的。每個(gè)工作者進(jìn)程都會(huì)包括一個(gè)單獨(dú)的主線程,因此,如果一個(gè)主線程繁忙,還有另外的主線程來(lái)處理到來(lái)的請(qǐng)求。

擁有多個(gè)工作者進(jìn)程會(huì)將你的web站點(diǎn)變成一個(gè)Web Garden,這要求你將Session和應(yīng)用數(shù)據(jù)持久化到Out-Proc中(例如一個(gè)state server或者Sql Server)。

巧妙地使用緩存和懶加載

無(wú)需強(qiáng)調(diào),如果你將經(jīng)常訪問(wèn)的一點(diǎn)數(shù)據(jù)緩存到內(nèi)存中,那么這會(huì)減少數(shù)據(jù)庫(kù)和web服務(wù)的調(diào)用。正如之前所說(shuō),這對(duì)于IO受限的應(yīng)用特別有幫助,當(dāng)網(wǎng)站處于低負(fù)載時(shí)可能會(huì)造成不幸。

提高站點(diǎn)響應(yīng)的另一種方式是使用懶加載。懶加載意味著應(yīng)用里不會(huì)有確定的數(shù)據(jù)片,但是它知道數(shù)據(jù)在哪里。比如,如果web頁(yè)面上有一個(gè)下拉列表,這意味著要顯示一個(gè)產(chǎn)品列表,一旦頁(yè)面加載完畢,不必從數(shù)據(jù)庫(kù)中加載所有的產(chǎn)品。你可以在頁(yè)面中添加一個(gè)jQuery函數(shù),該函數(shù)可以在第一次下拉時(shí)填充下拉列表。你也可以在代碼中的許多地方使用相同的技術(shù),比如當(dāng)使用Linq查詢和CLR集合時(shí)。

不要在MVC視圖中放C#代碼

ASP.NET MVC視圖會(huì)在運(yùn)行時(shí)編譯而不是在編譯時(shí),因此,如果在視圖中包含了太多的C#代碼,那么你的代碼不會(huì)編譯后放到dll文件中。這樣做不僅有害于軟件的可測(cè)試性,還會(huì)使web應(yīng)用更慢,因?yàn)槊總€(gè)頁(yè)面都有花更長(zhǎng)的時(shí)間獲得顯示(因?yàn)樗鼈儽仨毐痪幾g)。將代碼添加到視圖中的其他缺陷在于它們不能異步運(yùn)行,這樣,如果你決定基于TAP來(lái)構(gòu)建應(yīng)用時(shí),就不能充分利用視圖中的異步方法和action了。

比如,如果你的代碼中有這么一個(gè)方法:

public async Task<string> GetName(int code){    var result = …    return await result;

}

該方法可以在一個(gè)異步的ASP.NET MVC action的上下文中異步運(yùn)行,比如:

public Task<ActionResult> Index( CancellationToken ctx ){    var name = await GetName( 100 );
}

但是如果在一個(gè)視圖中調(diào)用這方法,因?yàn)樵撘晥D不是異步的,所以必須以一種線程阻塞(thread-blocking)的方式運(yùn)行,如:

var name = GetName(100).Result;

.Result會(huì)阻塞運(yùn)行的線程,直到GetName()處理完成了請(qǐng)求,這樣該應(yīng)用的執(zhí)行會(huì)停止一會(huì)兒,然而當(dāng)使用await關(guān)鍵字調(diào)用該代碼時(shí),該線程不會(huì)被阻塞。

適當(dāng)時(shí)使用Fire & Forget

注:Fire & Forget,字面意思是發(fā)射,然后忘記,不去理會(huì)了。網(wǎng)絡(luò)釋義為射后不理。
如果兩個(gè)或多個(gè)操作沒有生成單個(gè)事務(wù),那么你很可能不必按順序運(yùn)行它們。比如,如果一個(gè)用戶在你的站點(diǎn)注冊(cè)時(shí)創(chuàng)建了一個(gè)賬戶,一旦他們注冊(cè)了,你就把他們的詳細(xì)信息保存到數(shù)據(jù)庫(kù),然后給他們發(fā)送一封郵件,你不必等待郵件發(fā)送出去才結(jié)束這個(gè)操作。

在這種情況下,最好的方法很可能就是開啟一個(gè)新的線程,讓它給用戶發(fā)送郵件,然后返回到主線程。這就叫做Fire& Forget,它可以提高應(yīng)用的響應(yīng)能力。

為x64 CPU創(chuàng)建

32-bit的應(yīng)用局限于較低的內(nèi)存量和可以訪問(wèn)更少的CPU功能/指令。要克服這些限制,如果你的服務(wù)器是64-bit的,那么要確保你的應(yīng)用運(yùn)行在64-bit模式下(通過(guò)確保在IIS的32-bit模式下運(yùn)行網(wǎng)站的選項(xiàng)是不是開啟)。然后為x64 CPU編譯并生成代碼而不是Any CPU。

x64有用的一個(gè)例子是提高數(shù)據(jù)驅(qū)動(dòng)應(yīng)用的響應(yīng)能力和性能,有一個(gè)好的緩存機(jī)制是必須的。In-proc是消耗內(nèi)存的,因?yàn)橐磺卸即鎯?chǔ)在網(wǎng)站的應(yīng)用程序池的內(nèi)存邊界。對(duì)于x86進(jìn)程來(lái)說(shuō),可以分配的內(nèi)存量限制到4GB,這樣,如果加載到緩存中,這個(gè)限制很快就被打破。如果相同的站點(diǎn)是為x64 CPU顯式生成的,那么內(nèi)存限制就不需考慮了,這樣更多的條目可以加到緩存中,然后和數(shù)據(jù)庫(kù)的通訊就少了,這會(huì)帶來(lái)更好的性能。

使用服務(wù)器上的監(jiān)視和診斷工具

可能存在你肉眼看不到的更多的性能問(wèn)題,因?yàn)樗鼈儾粫?huì)出現(xiàn)在錯(cuò)誤日志中。當(dāng)應(yīng)用程序已經(jīng)部署到基本沒有機(jī)會(huì)調(diào)試的服務(wù)器上時(shí),識(shí)別性能問(wèn)題是更嚇人的事情。

要找出緩慢的處理,線程阻塞,懸掛,錯(cuò)誤等等,強(qiáng)烈建議在服務(wù)器上安裝一個(gè)監(jiān)視和診斷工具,讓它們持續(xù)地跟蹤和監(jiān)視你的應(yīng)用程序。我個(gè)人使用的是NewRelic檢查我的在線網(wǎng)站的健康。獲取詳細(xì)信息并創(chuàng)建免費(fèi)賬號(hào)看這里哦!

分析運(yùn)行中的應(yīng)用

一旦完成了網(wǎng)站開發(fā),部署到IIS,然后附加一個(gè)分析器(如Visual Studio Profiler),然后抓取應(yīng)用的多個(gè)部分的快照。比如抓取購(gòu)買或者用戶注冊(cè)等操作的快照,然后檢查病查看是否存在任何造成緩慢或阻塞的代碼。在早期階段找到那些熱點(diǎn)可能會(huì)節(jié)省你大量的時(shí)間,榮譽(yù)和金錢。

到此,相信大家對(duì)“怎么構(gòu)建高性能ASP.NET”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

當(dāng)前題目:怎么構(gòu)建高性能ASP.NET
當(dāng)前網(wǎng)址:http://chinadenli.net/article30/gohppo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、用戶體驗(yàn)微信公眾號(hào)、網(wǎng)站設(shè)計(jì)公司App設(shè)計(jì)、關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)
成人欧美精品一区二区三区| 国产精品丝袜一二三区| 成人国产一区二区三区精品麻豆| 四季精品人妻av一区二区三区 | 中文字幕日韩欧美亚洲午夜| 日本一本不卡免费视频| 一二区不卡不卡在线观看| 国产免费成人激情视频| 九九热视频网在线观看| 国产精品福利精品福利| 国产传媒一区二区三区| 日韩欧美综合中文字幕| 日韩黄片大全免费在线看| 青青操在线视频精品视频| 99久久国产综合精品二区| 久久一区内射污污内射亚洲| 超碰在线播放国产精品| 日韩国产精品激情一区| 日韩欧美三级视频在线| 老熟女露脸一二三四区| 麻豆精品在线一区二区三区| 亚洲夫妻性生活免费视频| 中文字幕日韩精品人一妻| 国产av天堂一区二区三区粉嫩| 日韩欧美国产精品自拍| 99精品国产一区二区青青 | 日本人妻丰满熟妇久久| 91日韩欧美国产视频| 东京热加勒比一区二区三区| 99久免费精品视频在线观| 日韩高清一区二区三区四区| 国产亚洲精品久久久优势| 好东西一起分享老鸭窝| 91插插插外国一区二区| 亚洲最新的黄色录像在线| 国产精品十八禁亚洲黄污免费观看| 国产一区欧美午夜福利| 微拍一区二区三区福利| 日本视频在线观看不卡| 视频在线观看色一区二区| 国产一级不卡视频在线观看|