自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

ASP.NET性能優(yōu)化之配置篇

開(kāi)發(fā) 后端
本文介紹ASP.NET性能優(yōu)化時(shí)需要注意的配置方面的事項(xiàng)。兩個(gè)方面:狀態(tài)管理和Web應(yīng)用程序的考慮。

下面講述ASP.NET性能優(yōu)化在配置內(nèi)容方面的兩個(gè)方法:狀態(tài)管理和Web應(yīng)用程序的考慮。

ASP.NET性能優(yōu)化之狀態(tài)管理

a)        當(dāng)不使用會(huì)話狀態(tài)時(shí)禁用它

并不是所有的應(yīng)用程序或頁(yè)都需要具體用戶的會(huì)話狀態(tài);您應(yīng)該在不需要時(shí)禁用會(huì)話狀態(tài)。若要禁用頁(yè)的會(huì)話狀態(tài),請(qǐng)將 @ Page 指令中的 EnableSessionState 屬性設(shè)置為 false。

如果頁(yè)需要訪問(wèn)會(huì)話變量,但不會(huì)創(chuàng)建或修改它們,則將 @ Page 指令中的 EnableSessionState 屬性設(shè)置為 ReadOnly。

若要禁用應(yīng)用程序的會(huì)話狀態(tài),請(qǐng)?jiān)趹?yīng)用程序的 Web.config 文件的 SessionState 節(jié)中將 Mode 屬性設(shè)置為 Off。

b)       針對(duì)應(yīng)用程序需要,選擇適當(dāng)?shù)臅?huì)話狀態(tài)提供程序

ASP.NET 為存儲(chǔ)應(yīng)用程序的會(huì)話數(shù)據(jù)提供了多種方法:進(jìn)程內(nèi)會(huì)話狀態(tài)、作為 Windows 服務(wù)的進(jìn)程外會(huì)話狀態(tài)和 SQL Server 數(shù)據(jù)庫(kù)中的進(jìn)程外會(huì)話狀態(tài)。(您還可以創(chuàng)建自定義會(huì)話狀態(tài)提供程序,以在所選數(shù)據(jù)存儲(chǔ)區(qū)中存儲(chǔ)會(huì)話數(shù)據(jù)。)每種方法都有自己的優(yōu)點(diǎn),但進(jìn)程內(nèi)會(huì)話狀態(tài)是迄今為止速度最快的解決方案。如果只在會(huì)話狀態(tài)中存儲(chǔ)少量易失數(shù)據(jù),則建議您使用進(jìn)程內(nèi)提供程序。進(jìn)程外會(huì)話狀態(tài)選項(xiàng)用于跨多個(gè)處理器或多個(gè)計(jì)算機(jī)縮放應(yīng)用程序,或者用于您希望在服務(wù)器或進(jìn)程重新啟動(dòng)時(shí)保留會(huì)話數(shù)據(jù)的情況。

ASP.NET性能優(yōu)化之Web 應(yīng)用程序

a)        考慮預(yù)編譯

在對(duì)資源(如 ASP.NET 網(wǎng)頁(yè))的***請(qǐng)求中,Web 應(yīng)用程序是批編譯的。如果應(yīng)用程序中的頁(yè)都沒(méi)有編譯,批編譯功能會(huì)成批編譯目錄中的所有頁(yè),以增加磁盤(pán)和內(nèi)存的使用率??梢允褂?ASP.NET 編譯工具 (Aspnet_compiler.exe) 預(yù)編譯 Web 應(yīng)用程序。對(duì)于就地編譯,該編譯工具調(diào)用 ASP.NET 運(yùn)行庫(kù)來(lái)編譯站點(diǎn),其方式與用戶向網(wǎng)站請(qǐng)求頁(yè)時(shí)的方式相同。可以預(yù)編譯 Web 應(yīng)用程序,以便保留 UI 標(biāo)記;也可以預(yù)編譯頁(yè),以便不能更改源代碼。

b)        去除客戶端雙連接限制

HTTP   規(guī)范表明,一個(gè)   HTTP   客戶端與任一服務(wù)器最多可以同時(shí)建立兩個(gè)   TCP   連接。這可以防止單個(gè)瀏覽器在瀏覽某個(gè)頁(yè)面(例如,具有120個(gè)嵌入的縮略圖)時(shí),由于連接請(qǐng)求過(guò)多而使服務(wù)器負(fù)載過(guò)重。

  1. < system.net> 
  2.    < connectionManager> 
  3.       < add address="*" maxconnection = "40" /> 
  4.          …  

(會(huì)加快客戶端對(duì)頁(yè)面訪問(wèn)速度,但是同時(shí)會(huì)增加服務(wù)器負(fù)載,配置需要權(quán)衡)

c)         在 Internet 信息服務(wù) 5.0 上,在進(jìn)程外運(yùn)行 Web 應(yīng)用程序

默認(rèn)情況下,IIS 5.0 上的 ASP.NET 將使用進(jìn)程外輔助進(jìn)程為請(qǐng)求提供服務(wù)。此功能已被優(yōu)化以提高吞吐量。由于在進(jìn)程外的輔助進(jìn)程中運(yùn)行 ASP.NET 有其功能和優(yōu)點(diǎn),建議在生產(chǎn)站點(diǎn)上使用它。

d)        定期回收進(jìn)程

為了同時(shí)保證穩(wěn)定性和性能,應(yīng)該定期回收進(jìn)程。經(jīng)過(guò)較長(zhǎng)的時(shí)間,有內(nèi)存泄漏和 Bug 的資源可以影響 Web 服務(wù)器的吞吐量,而回收進(jìn)程可以清理內(nèi)存避免這類(lèi)問(wèn)題。但是,應(yīng)當(dāng)平衡定期回收的需求和過(guò)頻的回收,因?yàn)橥V馆o助進(jìn)程、重新加載頁(yè)面并重新獲取資源和數(shù)據(jù)的開(kāi)銷(xiāo)可能會(huì)超過(guò)回收的好處。

在使用 IIS 6.0 的 Windows Server 2003 上運(yùn)行的 ASP.NET Web 應(yīng)用程序不需要調(diào)整進(jìn)程模型設(shè)置,因?yàn)?ASP.NET 將使用 IIS 6.0 進(jìn)程模型設(shè)置。

e)        必要時(shí)調(diào)整應(yīng)用程序每個(gè)輔助進(jìn)程的線程數(shù).

ASP.NET 的請(qǐng)求結(jié)構(gòu)試圖在執(zhí)行請(qǐng)求的線程數(shù)和可用資源之間達(dá)到一種平衡。該結(jié)構(gòu)將根據(jù)可用于請(qǐng)求的 CPU 功率,來(lái)決定允許同時(shí)執(zhí)行的請(qǐng)求數(shù)。這項(xiàng)技術(shù)稱作線程門(mén)控。但是在某些條件下,線程門(mén)控算法不是很有效。通過(guò)使用與“ASP.NET Applications”性能對(duì)象關(guān)聯(lián)的“Pipeline Instance Count”(管線實(shí)例計(jì)數(shù))性能計(jì)數(shù)器,可以在 Windows 性能監(jiān)視器中監(jiān)視線程門(mén)控。

當(dāng) ASP.NET 網(wǎng)頁(yè)調(diào)用外部資源時(shí)(例如執(zhí)行數(shù)據(jù)庫(kù)訪問(wèn)或 XML Web services 請(qǐng)求時(shí)),頁(yè)面請(qǐng)求通常停止并釋放 CPU 以處理其他線程,直到外部資源響應(yīng)為止。如果另一個(gè)請(qǐng)求正在等待處理,并且線程池中有一個(gè)線程釋放,則開(kāi)始處理這個(gè)正在等待的請(qǐng)求。這可能導(dǎo)致 ASP.NET 輔助進(jìn)程或應(yīng)用程序池中存在大量同時(shí)執(zhí)行的請(qǐng)求和許多正在等待的線程,而它們會(huì)影響 Web 服務(wù)器的吞吐量,從而對(duì)性能產(chǎn)生不利的影響。

為緩解這種情況,可以通過(guò)更改 Machine.config 文件的 processModel 節(jié)中的 MaxWorkerThreads 和 MaxIOThreads 屬性,手動(dòng)設(shè)置對(duì)進(jìn)程中的線程數(shù)的限制。

輔助線程是用來(lái)處理 ASP.NET 請(qǐng)求的,而 IO 線程則是用于為來(lái)自文件、數(shù)據(jù)庫(kù)或 XML Web services 的數(shù)據(jù)提供服務(wù)的。

分配給進(jìn)程模型屬性的值是進(jìn)程中每個(gè) CPU 每類(lèi)線程的***數(shù)目。對(duì)于雙處理器計(jì)算機(jī),***數(shù)是設(shè)置值的兩倍。對(duì)于四處理器計(jì)算機(jī),***值是設(shè)置值的四倍。對(duì)于有一個(gè)或兩個(gè)處理器的計(jì)算機(jī),默認(rèn)值就可以,但對(duì)于有兩個(gè)以上處理器的計(jì)算機(jī)的性能,進(jìn)程中有 100 或 200 個(gè)線程則弊大于利。因?yàn)轭~外的上下文交換導(dǎo)致操作系統(tǒng)將 CPU 周期花在維護(hù)線程而不是處理請(qǐng)求上,所以進(jìn)程中有太多線程往往會(huì)降低服務(wù)器的速度。線程適當(dāng)?shù)臄?shù)目***通過(guò)應(yīng)用程序的性能測(cè)試來(lái)確定。

f)         禁用調(diào)試模式

在部署生產(chǎn)應(yīng)用程序或進(jìn)行任何性能測(cè)量之前,始終禁用調(diào)試模式。如果啟用了調(diào)試模式,應(yīng)用程序的性能可能受到影響。

  1. < system.web> 
  2.    < compilation debug="false"> 
  3. …  

g)        優(yōu)化 Web 服務(wù)器計(jì)算機(jī)和特定應(yīng)用程序的配置文件以符合您的需要

默認(rèn)情況下,ASP.NET 配置被設(shè)置成啟用最廣泛的功能集并盡量適應(yīng)最常見(jiàn)的情況??筛哪承┠J(rèn)配置設(shè)置以提高應(yīng)用程序的性能,具體取決于您使用的功能。

1)僅對(duì)需要的應(yīng)用程序啟用身份驗(yàn)證

默認(rèn)情況下,ASP.NET 應(yīng)用程序的身份驗(yàn)證模式為 Windows 或集成的 NTLM。大多數(shù)情況下,***僅對(duì)需要身份驗(yàn)證的應(yīng)用程序在 Machine.config 文件中禁用身份驗(yàn)證,并在 Web.config 文件中啟用身份驗(yàn)證。

2)根據(jù)適當(dāng)?shù)恼?qǐng)求和響應(yīng)編碼設(shè)置來(lái)配置應(yīng)用程序

ASP.NET 默認(rèn)編碼格式為 UTF-8。如果您的應(yīng)用程序僅使用 ASCII 字符,請(qǐng)配置您的 ASCII 應(yīng)用程序以獲得稍許的性能提高。

3)考慮對(duì)應(yīng)用程序禁用 AutoEventWireup

在 Machine.config 文件中將 AutoEventWireup 屬性設(shè)置為 false,意味著頁(yè)面不會(huì)將頁(yè)事件綁定到基于名稱匹配的方法(例如 Page_Load)。如果禁用 AutoEventWireup,頁(yè)面將通過(guò)將事件連接留給您而不是自動(dòng)執(zhí)行它,獲得稍許的性能提升。

如果想要處理頁(yè)事件,可以使用兩種策略之一。***種策略是重寫(xiě)基類(lèi)中的方法。例如,可以為頁(yè)加載事件重寫(xiě) Page 對(duì)象的 OnLoad 方法,而不是使用 Page_Load 方法。(務(wù)必調(diào)用基方法以確保引發(fā)所有事件。)第二種策略是使用 Visual Basic 中的 Handles 關(guān)鍵字或 C# 中的委托連接來(lái)綁定到事件。

4)從請(qǐng)求處理管線中移除不用的模塊

默認(rèn)情況下,服務(wù)器計(jì)算機(jī)的 Machine.config 文件中 HttpModules 節(jié)點(diǎn)的所有功能均保留為活動(dòng)狀態(tài)。根據(jù)應(yīng)用程序所使用的功能,您可以從請(qǐng)求管線中移除不用的模塊以獲得稍許的性能提升。檢查每個(gè)模塊及其功能,并按您的需要自定義它。例如,如果您在應(yīng)用程序中不使用會(huì)話狀態(tài)和輸出緩存,則可以從 HttpModules 列表中移除它們,以便請(qǐng)求在不執(zhí)行其他有意義的處理時(shí),不必調(diào)用這些模塊。

本文來(lái)自shllove的專(zhuān)欄:《ASP.NET性能優(yōu)化整理》。

【編輯推薦】

  1. 最簡(jiǎn)便的ASP.NET性能監(jiān)視工具
  2. 有關(guān).NET性能的幾點(diǎn)誤區(qū),以及C#和VB.NET的關(guān)系
  3. Lambda表達(dá)式:要性能還是要清晰的代碼?
  4. 分析提高GDI編程性能的方法
  5. 使用Cache提高ASP.NET性能
責(zé)任編輯:yangsai 來(lái)源: shllove的專(zhuān)欄
相關(guān)推薦

2009-08-13 16:22:18

ASP.NET性能優(yōu)化

2012-05-16 10:24:26

ASP.NET性能優(yōu)化

2011-10-19 09:41:15

ASP.NET性能優(yōu)化

2011-10-17 09:54:18

ASP.NET性能

2024-06-11 09:00:00

異步編程代碼

2011-02-22 09:16:24

高性能ASP.NET

2011-02-13 09:37:55

ASP.NET

2009-02-23 15:55:29

ASP.NET.NET性能提升

2009-07-28 17:17:19

ASP.NET概述

2011-02-17 09:13:57

ASP.NET

2011-09-08 13:56:41

ASP.NET性能

2011-06-28 15:14:10

ASP.NET性能優(yōu)化

2018-02-23 13:55:16

ASP.NET性能優(yōu)化技巧

2021-05-19 08:04:11

ASP.Net服務(wù)性原則

2011-07-06 08:46:30

2024-12-05 08:14:41

2011-02-13 09:17:02

ASP.NET

2009-08-10 13:32:15

ASP.NET TimASP.NET組件設(shè)計(jì)

2011-02-23 09:49:40

ASP.NET

2009-07-20 17:27:01

配置ASP.NET
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)