您好,登錄后才能下訂單哦!
這篇文章主要講解了“ASP.NET配置怎么優化”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“ASP.NET配置怎么優化”吧!
ASP.NET性能優化之狀態管理
a) 當不使用會話狀態時禁用它
并不是所有的應用程序或頁都需要具體用戶的會話狀態;您應該在不需要時禁用會話狀態。若要禁用頁的會話狀態,請將 @ Page 指令中的 EnableSessionState 屬性設置為 false。
如果頁需要訪問會話變量,但不會創建或修改它們,則將 @ Page 指令中的 EnableSessionState 屬性設置為 ReadOnly。
若要禁用應用程序的會話狀態,請在應用程序的 Web.config 文件的 SessionState 節中將 Mode 屬性設置為 Off。
b) 針對應用程序需要,選擇適當的會話狀態提供程序
ASP.NET 為存儲應用程序的會話數據提供了多種方法:進程內會話狀態、作為 Windows 服務的進程外會話狀態和 SQL Server 數據庫中的進程外會話狀態。(您還可以創建自定義會話狀態提供程序,以在所選數據存儲區中存儲會話數據。)每種方法都有自己的優點,但進程內會話狀態是迄今為止速度最快的解決方案。如果只在會話狀態中存儲少量易失數據,則建議您使用進程內提供程序。進程外會話狀態選項用于跨多個處理器或多個計算機縮放應用程序,或者用于您希望在服務器或進程重新啟動時保留會話數據的情況。
ASP.NET性能優化之Web 應用程序
a) 考慮預編譯
在對資源(如 ASP.NET 網頁)的***請求中,Web 應用程序是批編譯的。如果應用程序中的頁都沒有編譯,批編譯功能會成批編譯目錄中的所有頁,以增加磁盤和內存的使用率。可以使用 ASP.NET 編譯工具 (Aspnet_compiler.exe) 預編譯 Web 應用程序。對于就地編譯,該編譯工具調用 ASP.NET 運行庫來編譯站點,其方式與用戶向網站請求頁時的方式相同。可以預編譯 Web 應用程序,以便保留 UI 標記;也可以預編譯頁,以便不能更改源代碼。
b) 去除客戶端雙連接限制
HTTP 規范表明,一個 HTTP 客戶端與任一服務器最多可以同時建立兩個 TCP 連接。這可以防止單個瀏覽器在瀏覽某個頁面(例如,具有120個嵌入的縮略圖)時,由于連接請求過多而使服務器負載過重。
< system.net> < connectionManager> < add address="*" maxconnection = "40" /> …
(會加快客戶端對頁面訪問速度,但是同時會增加服務器負載,配置需要權衡)
c) 在 Internet 信息服務 5.0 上,在進程外運行 Web 應用程序
默認情況下,IIS 5.0 上的 ASP.NET 將使用進程外輔助進程為請求提供服務。此功能已被優化以提高吞吐量。由于在進程外的輔助進程中運行 ASP.NET 有其功能和優點,建議在生產站點上使用它。
d) 定期回收進程
為了同時保證穩定性和性能,應該定期回收進程。經過較長的時間,有內存泄漏和 Bug 的資源可以影響 Web 服務器的吞吐量,而回收進程可以清理內存避免這類問題。但是,應當平衡定期回收的需求和過頻的回收,因為停止輔助進程、重新加載頁面并重新獲取資源和數據的開銷可能會超過回收的好處。
在使用 IIS 6.0 的 Windows Server 2003 上運行的 ASP.NET Web 應用程序不需要調整進程模型設置,因為 ASP.NET 將使用 IIS 6.0 進程模型設置。
e) 必要時調整應用程序每個輔助進程的線程數.
ASP.NET 的請求結構試圖在執行請求的線程數和可用資源之間達到一種平衡。該結構將根據可用于請求的 CPU 功率,來決定允許同時執行的請求數。這項技術稱作線程門控。但是在某些條件下,線程門控算法不是很有效。通過使用與“ASP.NET Applications”性能對象關聯的“Pipeline Instance Count”(管線實例計數)性能計數器,可以在 Windows 性能監視器中監視線程門控。
當 ASP.NET 網頁調用外部資源時(例如執行數據庫訪問或 XML Web services 請求時),頁面請求通常停止并釋放 CPU 以處理其他線程,直到外部資源響應為止。如果另一個請求正在等待處理,并且線程池中有一個線程釋放,則開始處理這個正在等待的請求。這可能導致 ASP.NET 輔助進程或應用程序池中存在大量同時執行的請求和許多正在等待的線程,而它們會影響 Web 服務器的吞吐量,從而對性能產生不利的影響。
為緩解這種情況,可以通過更改 Machine.config 文件的 processModel 節中的 MaxWorkerThreads 和 MaxIOThreads 屬性,手動設置對進程中的線程數的限制。
輔助線程是用來處理 ASP.NET 請求的,而 IO 線程則是用于為來自文件、數據庫或 XML Web services 的數據提供服務的。
分配給進程模型屬性的值是進程中每個 CPU 每類線程的***數目。對于雙處理器計算機,***數是設置值的兩倍。對于四處理器計算機,***值是設置值的四倍。對于有一個或兩個處理器的計算機,默認值就可以,但對于有兩個以上處理器的計算機的性能,進程中有 100 或 200 個線程則弊大于利。因為額外的上下文交換導致操作系統將 CPU 周期花在維護線程而不是處理請求上,所以進程中有太多線程往往會降低服務器的速度。線程適當的數目***通過應用程序的性能測試來確定。
f) 禁用調試模式
在部署生產應用程序或進行任何性能測量之前,始終禁用調試模式。如果啟用了調試模式,應用程序的性能可能受到影響。
< system.web> < compilation debug="false"> …
g) 優化 Web 服務器計算機和特定應用程序的配置文件以符合您的需要
默認情況下,ASP.NET 配置被設置成啟用最廣泛的功能集并盡量適應最常見的情況。可更改某些默認配置設置以提高應用程序的性能,具體取決于您使用的功能。
1)僅對需要的應用程序啟用身份驗證
默認情況下,ASP.NET 應用程序的身份驗證模式為 Windows 或集成的 NTLM。大多數情況下,***僅對需要身份驗證的應用程序在 Machine.config 文件中禁用身份驗證,并在 Web.config 文件中啟用身份驗證。
2)根據適當的請求和響應編碼設置來配置應用程序
ASP.NET 默認編碼格式為 UTF-8。如果您的應用程序僅使用 ASCII 字符,請配置您的 ASCII 應用程序以獲得稍許的性能提高。
3)考慮對應用程序禁用 AutoEventWireup
在 Machine.config 文件中將 AutoEventWireup 屬性設置為 false,意味著頁面不會將頁事件綁定到基于名稱匹配的方法(例如 Page_Load)。如果禁用 AutoEventWireup,頁面將通過將事件連接留給您而不是自動執行它,獲得稍許的性能提升。
如果想要處理頁事件,可以使用兩種策略之一。***種策略是重寫基類中的方法。例如,可以為頁加載事件重寫 Page 對象的 OnLoad 方法,而不是使用 Page_Load 方法。(務必調用基方法以確保引發所有事件。)第二種策略是使用 Visual Basic 中的 Handles 關鍵字或 C# 中的委托連接來綁定到事件。
4)從請求處理管線中移除不用的模塊
默認情況下,服務器計算機的 Machine.config 文件中 HttpModules 節點的所有功能均保留為活動狀態。根據應用程序所使用的功能,您可以從請求管線中移除不用的模塊以獲得稍許的性能提升。檢查每個模塊及其功能,并按您的需要自定義它。例如,如果您在應用程序中不使用會話狀態和輸出緩存,則可以從 HttpModules 列表中移除它們,以便請求在不執行其他有意義的處理時,不必調用這些模塊。
感謝各位的閱讀,以上就是“ASP.NET配置怎么優化”的內容了,經過本文的學習后,相信大家對ASP.NET配置怎么優化這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。