向書(shū)本學(xué)習(xí),還要向?qū)嵺`學(xué)習(xí)、向生活學(xué)習(xí)。消化已有知識(shí),
而且要力求有所發(fā)現(xiàn)、有所發(fā)明、有所創(chuàng)造
2019/3/25 9:28:55
現(xiàn)在寫(xiě)一個(gè)asp.net的web應(yīng)用程序變得非常的簡(jiǎn)單,許多的程序員都不愿花時(shí)間去構(gòu)建一個(gè)性能良好的應(yīng)用程序。本文將要討論提高web應(yīng)用程序性能的十大方法。我將不限于只討論asp.net應(yīng)用程序的內(nèi)容,因?yàn)樗鼈冎皇莣eb應(yīng)用程序的一個(gè)子集。本文也不能提供一個(gè)完整提高web應(yīng)用程序性能的指南,因?yàn)檫@需要一本書(shū)的篇幅。本文只提供一個(gè)提高web應(yīng)用程序性能的良好的開(kāi)端。(剩下的只有我們自己慢慢研究了)。
在工作這外,我經(jīng)常去攀巖,在每次攀巖之前,我都會(huì)重溫一下攀巖線路圖及看一下前面的成功的攀巖者的建議。因?yàn)槲覀冃枰鼈兊某晒?jīng)驗(yàn)。同樣的,當(dāng)你需要修改某個(gè)有性能問(wèn)題的程序或者是要開(kāi)發(fā)一個(gè)高性能的站點(diǎn)時(shí),你也需要學(xué)習(xí)怎么樣寫(xiě)一個(gè)高性能的web應(yīng)用程序。
我個(gè)人的經(jīng)驗(yàn)主要來(lái)源于在微軟的asp.net組擔(dān)任程序經(jīng)理,運(yùn)行和管理www.asp.net網(wǎng)站,和協(xié)助開(kāi)發(fā)Community Server(它是asp.net Forums,.Text, and nGallery的集成升級(jí)版本軟件)。我想這些經(jīng)驗(yàn)?zāi)芪易寔?lái)幫助大家。
你也許會(huì)想到把你的應(yīng)用程序劃分成不同的邏輯層。你也可能聽(tīng)過(guò)三層物理架構(gòu)或N層架構(gòu),這是最常用的架構(gòu)模式,它把不同的程序功能物理的分配給各個(gè)硬件來(lái)執(zhí)行。這樣,如果我們想提高應(yīng)用程序的性能的話,加一些硬件就可以達(dá)到目的了。按理說(shuō)這種方法能提高應(yīng)用程序的性能,但是我們應(yīng)該避免使用這種方法。所以,只要有可能,我們都應(yīng)該把a(bǔ)sp.net頁(yè)面和它用到的組件放到一個(gè)應(yīng)用程序中運(yùn)行。
因?yàn)榉植际降牟际?,要用到web services或者Remoting,它將使應(yīng)用程序的性能下降20%或者更多。
對(duì)于數(shù)據(jù)層有點(diǎn)不同,最好還是把它獨(dú)立出來(lái)布署,用一個(gè)單獨(dú)的硬件來(lái)運(yùn)行它。雖然這樣,但是數(shù)據(jù)庫(kù)仍然是應(yīng)用程序性能的瓶頸。因此,當(dāng)你想優(yōu)化你的程序的時(shí)候,首先想到的地方就應(yīng)該是優(yōu)化數(shù)據(jù)層了。
在修改應(yīng)用程序的出現(xiàn)性能問(wèn)題的地方之前,你要先確認(rèn)出問(wèn)題的地方的程序看起來(lái)很?chē)?yán)密,性能分析器對(duì)于查找應(yīng)用程序哪些地方花費(fèi)了多長(zhǎng)時(shí)間非常有用。這些地方是我們用直覺(jué)感覺(jué)不到的。
本文討論兩種類型的性能優(yōu)化:一種是大的性能優(yōu)化(big optimizations),如用asp.net的Cache;另一種是小的性能優(yōu)化(tiny optimizations)。小幅的性能優(yōu)化有時(shí)候非常有用。你只對(duì)你的代碼作一個(gè)小的改到,然后一次調(diào)用它一千或一萬(wàn)次。作一次大的性能優(yōu)化,你會(huì)發(fā)生你的應(yīng)用程序的速度會(huì)有一個(gè)很大的提升。作一次小的性能優(yōu)化,也許每次請(qǐng)求只能提高一微秒,但是如果每天的請(qǐng)求量很大的話,那么應(yīng)用程序就有很顯著的性能提升。
數(shù)據(jù)層的性能
當(dāng)你要優(yōu)化一個(gè)應(yīng)用程序的性能的時(shí)候,你可以按下面的順序工作:你的代碼要訪問(wèn)數(shù)據(jù)庫(kù)?如果要,訪問(wèn)數(shù)據(jù)庫(kù)頻率怎么樣?同樣,這種測(cè)試方法也可以用在用web services或Remoting的程序代碼中。本文將不討論用Web services和Remoting的程序優(yōu)化的問(wèn)題。
如果在你的代碼中有一段必須訪問(wèn)數(shù)據(jù)庫(kù)的請(qǐng)求,而你在其它的地方又看到實(shí)現(xiàn)同樣的功能 的代碼,那么你首先要優(yōu)化它。修改和完善繼續(xù)測(cè)試,除非你有一個(gè)非常大的性能問(wèn)題,你的時(shí)間最好花在優(yōu)化查詢,連接數(shù)據(jù)庫(kù),返回?cái)?shù)據(jù)集的大小,以及一次查詢往返回的時(shí)間上。
根據(jù)經(jīng)驗(yàn)的總結(jié),讓我們來(lái)看看十個(gè)能幫助你提升你的應(yīng)用程序性能的經(jīng)驗(yàn),我將按將它們提升效率的多少?gòu)拇蟮叫⌒∫来握f(shuō)明。
一、返回多個(gè)數(shù)據(jù)集
檢查你的訪問(wèn)數(shù)據(jù)庫(kù)的代碼,看是否存在著要返回多次的請(qǐng)求。每次往返降低了你的應(yīng)用程序的每秒能夠響應(yīng)請(qǐng)求的次數(shù)。通過(guò)在單個(gè)數(shù)據(jù)庫(kù)請(qǐng)求中返回多個(gè)結(jié)果集,可以減少與數(shù)據(jù)庫(kù)通信的時(shí)間,使你的系統(tǒng)具有擴(kuò)展性,也可以減少數(shù)據(jù)庫(kù)服務(wù)器響應(yīng)請(qǐng)求的工作量。
如果你是用動(dòng)態(tài)的SQL語(yǔ)句來(lái)返回多個(gè)數(shù)據(jù)集,那我建議你用存儲(chǔ)過(guò)程來(lái)替代動(dòng)態(tài)的SQL語(yǔ)句。是否把業(yè)務(wù)邏輯寫(xiě)到存儲(chǔ)過(guò)程中,這個(gè)有點(diǎn)爭(zhēng)議。但是我認(rèn)為,把業(yè)務(wù)邏輯寫(xiě)到存儲(chǔ)過(guò)程里面可以限制返回結(jié)果集的大小,減小網(wǎng)絡(luò)數(shù)據(jù)的流量,在邏輯層也不用在過(guò)濾數(shù)據(jù),這是一個(gè)好事情。
用SqlCommand對(duì)象的ExecuteReader方法返回一個(gè)強(qiáng)類型的業(yè)務(wù)對(duì)象,再調(diào)用NextResult方法來(lái)移動(dòng)數(shù)據(jù)集指針來(lái)定位數(shù)據(jù)集。示例一演示了一個(gè)返回多個(gè)ArrayList強(qiáng)類型對(duì)象的例子。只從數(shù)據(jù)庫(kù)中返回你需要的數(shù)據(jù)可以大大的減小你的服務(wù)器所耗用的內(nèi)存。
二、對(duì)數(shù)據(jù)進(jìn)行分頁(yè)
ASP。NET的DataGrid有一個(gè)非常有用的功能:分頁(yè)。如果DataGrid允許分頁(yè),在某一時(shí)刻它只下載某一頁(yè)的數(shù)據(jù),另外,它有一個(gè)數(shù)據(jù)分頁(yè)的濟(jì)覽導(dǎo)航欄,它讓你可以選擇瀏覽某一頁(yè),而且每次只下載一頁(yè)的數(shù)據(jù)。
但是它有一個(gè)小小的缺點(diǎn),就是你必須把所有的數(shù)
深圳市南山區(qū)南山街道南海大道西桂廟路北陽(yáng)光華藝大廈1棟4F、4G-04
咨詢電話:136 8237 6272
大客戶咨詢:139 0290 5075
業(yè)務(wù)QQ:195006118
技術(shù)QQ:179981967
深圳精銳軟件 深圳APP開(kāi)發(fā) 深圳小程序開(kāi)發(fā) 深圳微信開(kāi)發(fā) 深圳APP制作 深圳營(yíng)銷(xiāo)推廣 深圳網(wǎng)站建設(shè) 深圳游戲開(kāi)發(fā)
客戶案列
新聞資訊
資質(zhì)榮譽(yù)
團(tuán)隊(duì)風(fēng)采
項(xiàng)目進(jìn)度查詢
售前QQ咨詢
QQ溝通 項(xiàng)目QQ溝通