新聞中心
ASP.NET代碼優(yōu)化一、頁面和服務器控件處理

零陵ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!
1、ASP.NET代碼優(yōu)化避免到服務器的不必要的往返行程
在某些情況下不必使用 ASP.NET 服務器控件和執(zhí)行回發(fā)事件處理。例如,在 ASP.NET 網(wǎng)頁中驗證用戶輸入經(jīng)??稍跀?shù)據(jù)提交到服務器之前在客戶端進行。通常,如果不需要將信息傳遞到服務器以進行驗證或?qū)⑵鋵懭霐?shù)據(jù)存儲區(qū),請避免使用導致到服務器的往返行程的代碼,這樣可以提高頁的性能并改善用戶體驗。您也可以不執(zhí)行整個往返行程,而是使用客戶端回調(diào)從服務器中讀取數(shù)據(jù)。
頁面類實現(xiàn)ICallbackEventHandler接口,注冊GetCallbackEventReference方法,也就是ajax的回調(diào)實現(xiàn)。
針對一次需要載入很多控件的頁面(載入比較耗時的頁面),我們可以使用ajax技術來達到一定的頁面訪問性能提升。
2、ASP.NET代碼優(yōu)化使用 Page 對象的 IsPostBack 屬性來避免對往返行程執(zhí)行不必要的處理
如果您編寫處理服務器控件回發(fā)處理的代碼,有時可能需要代碼僅在***請求頁時執(zhí)行,而不是每次回發(fā)時都執(zhí)行。根據(jù)該頁是否是響應服務器控件事件生成的,使用 IsPostBack 屬性有條件地執(zhí)行代碼。
將僅需要***請求頁面時執(zhí)行的代碼放在IsPostBack條件中運行。
3、ASP.NET代碼優(yōu)化只在必要時保存服務器控件視圖狀態(tài)
自動視圖狀態(tài)管理使服務器控件可以在往返行程中重新填充它們的屬性值,而您不需要編寫任何代碼。但是,因為服務器控件的視圖狀態(tài)在隱藏的窗體字段中往返于服務器,所以該功能影響性能。了解在哪些情況下視圖狀態(tài)會有所幫助,在哪些情況下它影響頁的性能,這樣是有幫助的。例如,如果您將服務器控件綁定到每個往返行程上的數(shù)據(jù),因為控件的值會在數(shù)據(jù)綁定期間用新值替換,所以保存的視圖狀態(tài)沒有用處。在這種情況下,禁用視圖狀態(tài)可以節(jié)省處理時間并減少頁的大小。
默認情況下,為所有服務器控件啟用視圖狀態(tài)。若要禁用它,請將控件的 EnableViewState 屬性設置為 false。
還可以使用 @ Page 指令禁用整個頁的視圖狀態(tài)。當您不從頁回發(fā)到服務器時,這將十分有用。
@ Control 指令中還支持 EnableViewState 屬性以指定是否為用戶控件啟用視圖狀態(tài)。
查看視圖狀態(tài)的方法:
若要分析服務器控件在頁中使用的視圖狀態(tài)的大小,請通過將 trace="true" 屬性包含在 @ Page 指令中啟用對該頁的跟蹤。然后在跟蹤輸出中,查看“控件層次結構”表的“Viewstate”列。
下面情況基本上可以禁用viewstate:
(1)頁面控件 (.ascx)
(2)頁面不回傳給自身。
(3)無需對控件的事件處理。
(4)控件沒有動態(tài)的或數(shù)據(jù)綁定的屬性值(或?qū)τ诿總€postpack都在代碼中處理)
4、ASP.NET代碼優(yōu)化除非有特殊的原因要關閉緩沖,否則使其保持打開狀態(tài)
禁用 ASP.NET 網(wǎng)頁的緩沖會導致大量的性能開銷。
***SP.NET代碼優(yōu)化Server.Transfer和Response.Redirect的選擇
Response.Redirect 簡單地告訴瀏覽器訪問另一個頁面。Server.Transfer 有利于減少服務器請求,保持地址欄 URL 不變,允許你將 query string 和 form 變量傳遞到另一個頁面,可以隱藏url中傳遞的參數(shù)。
Response.Redirect可以跨站點跳轉(zhuǎn),Server.Transfer只能同站點跳轉(zhuǎn)。
微軟ASP.NET代碼優(yōu)化建議:
使用 Transfer Server 對象或跨頁發(fā)送的方法在同一個應用程序中的不同 ASP.NET 頁之間重定向
如無特殊要求,應優(yōu)先選擇Server.Transfer進行頁面跳轉(zhuǎn)
ASP.NET代碼優(yōu)化二、數(shù)據(jù)訪問
1、ASP.NET代碼優(yōu)化將 SQL Server 和存儲過程用于數(shù)據(jù)訪問
在 .NET Framework 提供的所有數(shù)據(jù)訪問方法中,使用 SQL Server 進行數(shù)據(jù)訪問是生成高性能、可縮放 Web 應用程序的推薦選擇。使用托管 SQL Server 提供程序時,可通過盡可能使用編譯的存儲過程而不是 SQL 命令獲得額外的性能提高。
(僅針對數(shù)據(jù)庫選擇SQL Server,數(shù)據(jù)庫為其他的可以忽略此選項)
2、ASP.NET代碼優(yōu)化將 SqlDataReader 類用于快速只進數(shù)據(jù)游標
SqlDataReader 類提供了從 SQL Server 數(shù)據(jù)庫檢索的只進數(shù)據(jù)流。如果您可以在 ASP.NET 應用程序中使用只讀流,則 SqlDataReader 類提供比 DataSet 類更高的性能。SqlDataReader 類使用 SQL Server 的本機網(wǎng)絡數(shù)據(jù)傳輸格式從數(shù)據(jù)庫連接直接讀取數(shù)據(jù)。例如,當綁定到 SqlDataSource 控件時,通過將 DataSourceMode 屬性設置為 DataReader,您將獲得更好的性能。(使用數(shù)據(jù)讀取器會導致某些功能的丟失。)另外,SqlDataReader 類實現(xiàn) IEnumerable 接口,該接口也使您可以將數(shù)據(jù)綁定到服務器控件。
(僅針對數(shù)據(jù)庫選擇SQL Server,數(shù)據(jù)庫為其他的可以忽略此選項) MySql中對應MySqlDataReader,根據(jù)需要選擇。
3、ASP.NET代碼優(yōu)化盡可能緩存數(shù)據(jù)和頁輸出
ASP.NET 提供了一些機制,它們會在不需要為每個頁請求動態(tài)計算頁輸出或數(shù)據(jù)時緩存這些頁輸出或數(shù)據(jù)。另外,通過設計要進行緩存的頁和數(shù)據(jù)請求(特別是在站點中預期將有較大通訊量的區(qū)域),可以優(yōu)化這些頁的性能。與使用 .NET Framework 的任何其他功能相比,適當?shù)厥褂镁彺婵梢愿玫靥岣哒军c的性能。
在使用 ASP.NET 緩存時,應注意以下事項。首先,不要緩存太多項。緩存每個項都有內(nèi)存開銷。不要緩存容易重新計算和很少使用的項。其次,給緩存項分配的有效期不要太短。很快到期的項會導致緩存中不必要的周轉(zhuǎn),并且會導致額外的代碼清除和垃圾回收工作。使用與“ASP.NET Applications”性能對象關聯(lián)的“Cache Total Turnover Rate”(緩存總流通率)性能計數(shù)器,您可以監(jiān)視緩存中由于項到期而導致的周轉(zhuǎn)。高周轉(zhuǎn)率可能說明存在問題,特別是當項在到期前被移除時。(這種情況有時稱作內(nèi)存壓力。)
可以考慮把靜態(tài)的、變化不大的或者不經(jīng)常變化需要動態(tài)加載的內(nèi)容放入控件中,使用緩存技術。
﹤%@ OutputCache Duration="100" VaryByParam="none" %﹥
4、ASP.NET代碼優(yōu)化適當?shù)厥褂?SQL 緩存依賴項
ASP.NET 同時支持基于表的輪詢和查詢通知,具體取決于所使用的 SQL Server 的版本。所有 SQL Server 版本都支持基于表的輪詢。在基于表的輪詢中,如果表中的任何內(nèi)容發(fā)生更改,所有偵聽器都會失效。這可能導致應用程序中不必要的改動。建議不要將基于表的輪詢用于具有許多頻繁更改的表。例如,建議將基于表的輪詢用于很少更改的目錄表。建議不要將基于表的輪詢用于訂單表,訂單表具有更頻繁的更新。SQL Server 2005 支持查詢通知。查詢通知支持特定查詢,從而減少在表更改時發(fā)送的通知數(shù)量。雖然它比基于表的輪詢提供更好的性能,但是它無法擴展到適應數(shù)千個查詢。
(僅針對數(shù)據(jù)庫選擇SQL Server,數(shù)據(jù)庫為其他的可以忽略此選項)
***SP.NET代碼優(yōu)化使用數(shù)據(jù)源分頁和排序而不是 UI(用戶界面)分頁和排序
DetailsView 和 GridView 等數(shù)據(jù)控件的 UI 分頁功能可用于支持 ICollection 接口的任何數(shù)據(jù)源對象。對于每個分頁操作,數(shù)據(jù)控件查詢數(shù)據(jù)源的整個數(shù)據(jù)集并選擇要顯示的行,并放棄其余的數(shù)據(jù)。如果數(shù)據(jù)源實現(xiàn) DataSourceView 并且 CanPage 屬性返回 true,則數(shù)據(jù)控件將使用數(shù)據(jù)源分頁而不是 UI 分頁。在這種情況下,數(shù)據(jù)控件僅查詢每個分頁操作需要的行。因此,數(shù)據(jù)源分頁比 UI 分頁更高效。只有 ObjectDataSource 數(shù)據(jù)源控件才支持數(shù)據(jù)源分頁。若要在其他數(shù)據(jù)源控件上啟用數(shù)據(jù)源分頁,必須從該數(shù)據(jù)源控件繼承并修改其行為。
6、ASP.NET代碼優(yōu)化平衡事件驗證的安全性受益和性能開銷
從 System.Web.UI.WebControls 和 System.Web.UI.HtmlControls 類派生的控件可以驗證事件是否源自該控件所呈現(xiàn)的用戶界面。這樣有助于防止控件響應偽造的事件通知。例如,DetailsView 控件可以防止 Delete(刪除)調(diào)用(控件中本質(zhì)上不支持該調(diào)用)的處理以及被操縱而刪除數(shù)據(jù)。此驗證會帶來一定的性能開銷。可以使用 EnableEventValidation 配置元素和 RegisterForEventValidation 方法控制此行為。驗證的開銷取決于頁上的控件數(shù)量,并在幾個百分點范圍內(nèi)。
強烈建議不要禁用事件驗證。在禁用事件驗證之前,應該確保不會構造任何可能對應用程序具有意外影響的回發(fā)。
7、ASP.NET代碼優(yōu)化,除非必要,否則避免使用視圖狀態(tài)加密
視圖狀態(tài)加密會阻止用戶能夠讀取隱藏視圖狀態(tài)字段中的值。典型情況是在 DataKeyNames 屬性中帶有一個標識符字段的 GridView 控件。標識符字段是協(xié)調(diào)對記錄的更新所必需的。由于不想要標識符對用戶可見,因此可以加密視圖狀態(tài)。但是,加密對于初始化具有恒定的性能開銷,并具有取決于被加密的視圖狀態(tài)大小的附加開銷。加密為每次頁加載而設置,因此在每次頁加載時都會發(fā)生相同的性能影響。
8、ASP.NET代碼優(yōu)化使用 SqlDataSource 緩存、排序和篩選
如果 SqlDataSource 控件的 DataSourceMode 屬性設置為 DataSet,則 SqlDataSource 能夠緩存查詢產(chǎn)生的結果集。如果以這種方式緩存數(shù)據(jù),則控件的篩選和排序操作(使用 FilterExpression 和 SortParameterName 屬性進行配置)將使用緩存的數(shù)據(jù)。在許多情況下,如果緩存整個數(shù)據(jù)集,并使用 FilterExpression 和 SortParameterName 屬性進行排序和篩選,而不是使用帶“WHERE”和“SORT BY”子句的 SQL 查詢(對于這些查詢,每個選擇操作都要訪問數(shù)據(jù)庫),應用程序會運行得更快。
(根據(jù)具體控件,僅支持部分數(shù)據(jù)庫)
ASP.NET代碼優(yōu)化的相關內(nèi)容就介紹到這里,希望通過本文的講解你對ASP.NET代碼優(yōu)化有所認識。
網(wǎng)站欄目:ASP.NET代碼優(yōu)化淺析
文章分享:http://www.fisionsoft.com.cn/article/djcehcg.html


咨詢
建站咨詢
