北京北大青鳥學校學術部提供
接上篇文章:ASP.NET中優(yōu)化性能的方法(二)
13. 使請求管線內(nèi)的所有模塊盡可能高效
請求管線內(nèi)的所有模塊在每次請求中都有機會被運行。因此,當請求進入和離開模塊時快速地觸發(fā)代碼至關重要,特別是在不使用模塊功能的代碼路徑里。分別在使用及不使用模塊和配置文件時執(zhí)行吞吐量測試,對確定這些方法的執(zhí)行速度非常有用。
14. 使用 HttpServerUtility.Transfer 方法在同一應用程序的頁面間重定向
采用 Server.Transfer 語法,在頁面中使用該方法可避免不必要的客戶端重定向。
15. 必要時調(diào)整應用程序每個輔助進程的線程數(shù)
ASP.NET 的請求結構試圖在執(zhí)行請求的線程數(shù)和可用資源之間達到一種平衡。已知一個使用足夠 CPU 功率的應用程序,該結構將根據(jù)可用于請求的 CPU 功率,來決定允許同時執(zhí)行的請求數(shù)。這項技術稱作線程門控。但是在某些條件下,線程門控算法不是很有效。通過使用與 ASP.NET Applications 性能對象關聯(lián)的 Pipeline Instance Count 性能計數(shù)器,可以在 PerfMon 中監(jiān)視線程門控。當頁面調(diào)用外部資源,如數(shù)據(jù)庫訪問或 XML Web services 請求時,頁面請求通常停止并釋放 CPU。如果某個請求正在等待被處理,并且線程池中有一個線程是自由的,那么這個正在等待的請求將開始被處理。遺憾的是,有時這可能導致 Web 服務器上存在大量同時處理的請求和許多正在等待的線程,而它們對服務器性能有不利影響。通常,如果門控因子是外部資源的響應時間,則讓過多請求等待資源,對 Web 服務器的吞吐量并無幫助。為緩和這種情況,可以通過更改 Machine.config 配置文件節(jié)點的 maxWorkerThreads 和 maxIOThreads 屬性,手動設置進程中的線程數(shù)限制。
北京北大青鳥學校提醒:輔助線程是用來處理 ASP.NET 請求的,而 IO 線程則是用于為來自文件、數(shù)據(jù)庫或 XML Web services 的數(shù)據(jù)提供服務的。分配給這些屬性的值是進程中每個 CPU 每類線程的最大數(shù)目。對于雙處理器計算機,最大數(shù)是設置值的兩倍。對于四處理器計算機,最大值是設置值的四倍。無論如何,對于有四個或八個 CPU 的計算機,最好更改默認值。對于有一個或兩個處理器的計算機,默認值就可以,但對于有更多處理器的計算機的性能,進程中有一百或兩百個線程則弊大于利。注意進程中有太多線程往往會降低服務器的速度,因為額外的上下文交換導致操作系統(tǒng)將 CPU 周期花在維護線程而不是處理請求上。(未完待續(xù),北京北大青鳥學校提供)
相關閱讀:ASP.NET中優(yōu)化性能的方法(一)