發佈時間: 2010-03-10 10:27 閱讀: 1168 次 推薦: 0 原文連接 [收藏] html
最近在領導的要求下作了一下項目的優化,總結以下:web
1. 使用存儲過程(若是在程序裏用exec 存儲過程參數,這樣執行彷佛並無快多少)。sql
在數據庫裏是預編譯的,也不須要在字符串傳輸上花費大量時間。 防sql注入攻擊。數據庫
2. 儘可能優化數據庫語句,使邏輯儘可能簡單緩存
a) 還有就是在使用函數時,charindex >like > padindex 效率依次遞減。安全
b) 查詢字段是否包含在以,分隔的字段串時,最好不要用in 速度很是慢。性能優化
還有好多,能夠總結的,這裏就再也不描述了。服務器
3. EnableViewState(頁面的視圖狀態)。若是無特殊要求設置爲false。session
使用ViewState,每一個對象都必須先序列化到ViewState中,而後再經過回傳進行反序列化,所以使用ViewState是有代價的。儘可能減小使用對象,若是可能,儘可能減小放入ViewState中的對象的數目。下面狀況基本上能夠禁用ViewState:框架
(1) 頁面控件 (.ascx)。
(2) 頁面不回傳給自身。
(3) 無需對控件的事件處理。
(4) 控件沒有動態的或數據綁定的屬性值(或對於每一個postpack都在代碼中處理)。
單個頁面或每一個頁面都禁用 ViewState,以下所示:
單個頁面:<%@ Page EnableViewState="False" %>
每一個頁面:在 web.config 中 <Pages EnableViewState="false" />
EnableSessionState保持默認值便可(若是頁面用到sessionstate它纔會佔用資源)。
EnableViewStateMac若是無安全上的特殊要求,保持默認值。
4. Pagelayout頁面佈局模型
建議使用Flowlayout(元素不帶絕對定位屬性添加)。Gridlayout(絕對定位屬性)因爲採用絕對定位,將會比Flowlayout生產更多的代碼,主要是控件的定位信息。radiobuttonlist和checkboxlist等
5. 項目發佈的時候切記解除頁面的Debug狀態
6. 儘可能選擇html控件
能在客戶端實現的功能就在客戶端實現(熟練掌握JavaScript),減小服務器的壓力。數據控件選擇順序:Repeater、DataList、DataGrid。
7. 在創建數據庫鏈接後只有在真正須要操做時纔打開鏈接,使用完畢後立刻關閉,從而儘可能減小數據庫鏈接打開的時間,避免出現超出鏈接限制的狀況。
8. 字符串操做性能優化
(1) 使用值類型的ToString方法。
在鏈接字符串時,常用"+"號直接將數字添加到字符串中。這種方法雖然簡單,也能夠獲得正確結果,可是因爲涉及到不一樣的數據類型,數字須要經過裝箱操做 ,轉化爲引用類型才能夠添加到字符串中。可是裝箱操做對性能影響較大,由於在進行這類處理時,將在託管堆中分配一個新的對象,原有的值複製到新建立的對象中。使用值類型的ToString方法能夠避免裝箱操做,從而提升應用程序性能。
(2) 運用StringBuilder類
String類對象是不可改變的,對於String對象的從新賦值在本質上是從新建立了一個String對象並將新值賦予該對象,其方法ToString對性能的提升並不是很顯著。在處理字符串時,最好使用StringBuilder類,其.NET 命名空間是System.Text。該類並不是建立新的對象,而是經過Append,Remove,Insert等方法直接對字符串進行操做,經過 ToString方法返回操做結果。
9. 只要可能就緩存數據或頁輸出
ASP.NET 提供了一些簡單的機制,它們會在不須要爲每一個頁請求動態計算頁輸出或數據時緩存這些頁輸出或數據。另外,經過設計要進行緩存的頁和數據請求(特別是在站點中預期將有較大通信量的區域),能夠優化這些頁的性能。與.NET Framework的任何Web窗體功能相比,適當地使用緩存能夠更好的提升站點的性能,有時這種提升是超數量級的。使用ASP.NET緩存機制有兩點須要注意。首先,不要緩存太多項。緩存每一個項均有開銷,特別是在內存使用方面。不要緩存容易從新計算和不多使用的項。其次,給緩存的項分配的有效期不要過短。很快到期的項會致使緩存中沒必要要的週轉,而且常常致使更多的代碼清除和垃圾回收工做。若關心此問題,請監視與ASP.NET Applications 性能對象關聯的Cache Total Turnover Rate性能計數器。高週轉率可能說明存在問題,特別是當項在到期前被移除時。這也稱做內存壓力。
10. 使用 HttpServerUtility.Transfer 方法在同一應用程序的頁面間重定向
採用 Server.Transfer 語法,在頁面中使用該方法可避免沒必要要的客戶端重定向。但要根據狀況區分Response.Redirect .Response.Execute的使用方法,區別對待。
11 .適當地使用公共語言運行庫的垃圾回收器和自動內存管理
當心不要給每一個請求分配過多內存,由於這樣垃圾回收器將必須更頻繁地進行更多的工做。另外,不要讓沒必要要的指針指向對象,由於它們將使對象保持活動狀態,而且應儘可能避免含Finalize方法的對象,由於它們在後面會致使更多的工做。特別是在 Finalize 調用中永遠不要釋放資源,由於資源在被垃圾回收器回收以前可能一直消耗着內存。最後這個問題常常會對Web服務器環境的性能形成毀滅性的打擊,由於在等待 Finalize 運行時,很容易耗盡某個特定的資源。
12. 不要依賴代碼中的異常
由於異常大大地下降性能,因此您不該該將它們用做控制正常程序流程的方式。若是有可能檢測到代碼中可能致使異常的狀態,請執行這種操做。不要在處理該狀態以前捕獲異常自己。常見的方案包括:檢查null,分配給將分析爲數字值的String 一個值,或在應用數學運算前檢查特定值。
13. 使用HttpResponse.Write方法進行字符串串聯
該方法提供很是有效的緩衝和鏈接服務。可是,若是您正在執行普遍的鏈接,請使用多個Response.Write 調用。下面示例中顯示的技術比用對Response.Write 方法的單個調用鏈接字符串更快。
Response.Write("atest");
Response.Write(strString);
Response.Write("boxbig");
14. 除非有特殊的緣由要關閉緩衝,不然使其保持打開。
禁用 Web 窗體頁的緩衝會致使大量的性能開銷。
15. 避免到服務器的沒必要要的往返過程
使用Page.IsPostBack避免對往返過程執行沒必要要的處理。
雖然您極可能但願儘可能多地使用Web窗體頁框架的那些節省時間和代碼的功能,但在某些狀況下卻不宜使用 ASP.NET 服務器控件和回發事件處理。一般,只有在檢索或存儲數據時,您才須要啓動到服務器的往返過程。多數數據操做可在這些往返過程間的客戶端上進行。
16. ASP.NET應用程序性能測試
在對ASP.NET應用程序進行性能測試以前,應確保應用程序沒有錯誤,並且功能正確。具體的性能測試能夠採用如下工具進行:Web Application Strees Tool (WAS)是Microsoft發佈的一個免費測試工具。它能夠模擬成百上千個用戶同時對Web應用程序進行訪問請求,在服務器上造成流量負載,從而達到測試的目的,能夠生成平均TTFB、平均TTLB等性能彙總報告。 Application Center Test (ACT) 是一個測試工具,附帶於Visual Studio.NET的企業版中,是Microsoft正式支持的Web應用程序測試工具。它可以直觀地生成圖表結果,功能比WAS多,但不具有多個客戶機同時測試的能力。服務器操做系統"管理工具"中的"性能"計數器,能夠對服務器進行監測以瞭解應用程序性能。微軟仍是出了IIS日誌查看工具 LogParserLizardSetup.msi,LogParser.msi 二者配合使用。可查看每個頁面加載調用執行的時間。
17. 壓縮js
js在頁面中調用的大小寫要保持一致,省得緩存了不一樣的文件,頁面的js能夠的話,寫成單位的文件進行調用 。圖片少用jpeg,使用gzip對網頁進行壓縮. 加快頁面展現速度。
18. 把調用js,儘可能寫在頁面底部, 還有viewstate 狀態也能夠重寫到頁面低部, 也能夠把viewstate進行壓縮。條件是viewstate必要要用的狀況之下。