摘要:
開發一個對使用者的請求做出很快回應的應用程式是每個開發人員的目標和挑戰!ASP.NET是為速度最佳化和效能改進而設計的,它的改進體現在在服務端的頁編譯和自動儲存。然而,當你的應用程式在同一時間內執行大量的請求時,這項改進仍然無法防止效能的降低。
為了寫一個高效能的應用程式,你必需平衡通常影響效能的四個方面. 表現如下:
執行時間:執行一個請求所花的時間,從接收到第一個位元組算起到接收到最後一個位元組所花的時間。
回應時間:從發送請求到伺服器響應接收到第一個位元組所花的時間。
伸縮性:這個主要表現在伺服器分配給應用程式的資源(記憶體,CPU或電腦)。
輸送量:在一個單位時間內(通常是1秒)能夠處理請求的數量。
以下是能夠讓你開發出一個高效能應用程式的幾個方面:
狀態管理,
資料存放區,
頁面和伺服器控制項,
網頁應用程式,
代碼實踐。
我們先從前面兩個方面來展開說明,在下一篇文章中將涵概後面三個方面的內容,以及緩衝技術將在緩衝最佳化的文章裡詳細講解。
狀態管理:
以下列出的一些建議指出怎樣更有效執行狀態管理:
SessionState 語句:
當你不用Session時請關閉Session狀態,並不是所有的網站都會儲存每個使用者Session狀態。當你禁用不必要的Session狀態時你的網站效能將會有所提高。在網頁中禁Session狀態請用下面的代碼:
1 <%@ page EnableSessionState="false" %>
2
如果你的頁面只要求讀取Session的值,你可以將其設為唯讀。如果要禁用整個網站的Session會話可以開啟Web.config檔案,將SessionState節點的mode屬性設定為false,代碼如下:1 <SessionState mode="off" />
Session State Provider
不只一個儲存Session狀態資料的方式,你可以從Web.config檔案中的SessionState節點的Mode屬性中設定你所喜歡的方式來儲存其資料。它所支援的儲存方式包括:in-process模式,state server模式,Sql server模式以及自訂模式。每一種模式在選定的環境下都有其自身的優勢。in-process模式是至今最快的一種模式,如果你想用Session來儲存一些小而且經常變動的資料,這種模式是你理想的選擇。如果你想在重起你的伺服器後仍然維持你的Session狀態,state server模式和SQL Server模式是不錯的選擇。
資料存放區:
以下幾點指出怎麼更有效進行資料存放區:
應用SQL server provider
Sql server provider能夠開發更高效的網站應用程式程式以及更好的擴充性。
應用SQL DATA READER
SqlDataReader類在整個運行過程中只檢索中一次資料,因此在條件允許的情況下應用SqlDataReader類來替代DataSet,DataTable等,這樣能給你的應用程式帶來更高的效能。
應用預存程序
儘可能的用預存程序來代替命令語句,因為預存程序是經過編譯以後執行的,這樣就能夠提高資料庫處理速度。
應用SqlDataSource的相關屬性
替換包括"Where"或"Sort by"的SQL條件陳述式,充分利用SqlDataSource的相關屬性(如:caching, filtering, 和sorting)
你可以將SqlDataSource對象的"EnableCaching"屬性設定為true以啟用將所檢索的資料緩衝於這個DataSource中。當你啟用緩衝時,SqlDataSource對象將對所檢索的快取資料中執行如filtering和Sorting。可以應用SqlDataSource對象的FilterExpression和SortParameterName兩個屬性來對資料進行過濾和排序操作。這樣肯定能夠提高你網站的效能。
ViewState加密
為了提高安全性,必須將重要的儲存在ViewState的資料進行加密解密,但這樣會對你的應用程式的速度帶來一定的影響。加密包括一個以裝載的對象初始化加上一個未載入的資料的大小,如果資料越大所耗的時間也越長,因此應對ViewState資料視其重要性而進行適當的加密。
分頁
眾所周知,如果你要顯示一個給定資料來源的資料,你必須用一些像:GridView或DetailsView等伺服器控制項,並將其資料來源進行邦定。你可能將會通過GridView或DetailsView來對資料來源的記錄或列進行篩選,將其paging屬性設為true。這種分頁技術叫做UI分頁(User Interface paging)。為了實現這項功能,GridView控制項會請求擷取特殊的資料來源,從中擷取當前頁面所需要的所有記錄而忽視其他的資料。在每一頁中都需要執行這樣的操作,這樣當然造成資源很大的浪費。
還有一個技術能實現這種功能,這中技術就是資料來源分頁技術。這種技術將藉助於data source控制項來實現,DataSourceView就是處理類,當GridView或DetailsView應用到此資料來源時將其CanPage屬性設為true。這樣資料來源將只取當前頁的資料,可以看出資料來源分頁比UI分頁更有效。唯一可以讓資料來源分頁的為ObjectDataSource類。
緩衝
應用緩衝能夠其他任何技術更能提高你網站的效能。.NET 架構提供了幾種快取頁面面的通道以及在ASP.NET應用程式中快取資料的方法。你可以將很重要而又在各個請求中不變的資料或頁面進行緩衝。
為了能夠使緩衝更有效,請看以下幾點:
-不要緩衝短時間到期的快取項目,每一個快取項目到期都涉及到緩衝的清理和垃圾的回收。
-不要緩衝太大的快取項目,這樣對每一項將消耗更多的記憶體。一些很容易計算等的資料就沒有必要進行緩衝。
緩衝如此重要,Asp.NET架構給我們提供了多種的通道來逐漸改進我們的網站效能。這些方法包括:緩衝應用程式資料,網頁輸出快取,緩衝一個網頁和快取頁面面中的一部分。
更多內容可以看MSDN。
這篇文章翻譯的還真是累啊,由於中途有事翻譯間隔了好幾天,也用了好幾次才翻譯過來,如果和英文的有出路請指出,明天要上班,晚安!