性能優化總結

最近在領導的要求下做了一下項目的優化,總結如下:

 

    1.    使用存儲過程, (如果在程序裏用exec 存儲過程 參數,這樣執行似乎並沒有快多少)

           在數據庫裏是預編譯的,也不需要在字符串傳輸上花費大量時間。  防sql注入攻擊。

    2.     儘量優化數據庫語句,使邏輯儘量簡單。      

          @  還有就是在使用函數時    charindex   >like > padindex  效率依次遞減。  

          @查詢字段是否包含在以,分隔的字段串時,最好不要用in  速度非常慢。  還有好多,可以總結的,這裏就不再描述了。

    3.   EnableViewState(頁面的視圖狀態)。如果無特殊要求設置爲false。

          使用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.   字符串操作性能優化

         使用值類型的ToString方法
     在連接字符串時,經常使用"+"號直接將數字添加到字符串中。這種方法雖然簡單,也可以得到正確結果,但是由於涉及到不同的數據類型,數字需要通過裝箱          操 。作轉化爲引用類型纔可以添加到字符串中。但是裝箱操作對性能影響較大,因爲在進行這類處理時,將在託管堆中分配一個新的對象,原有的值複製

         到新創建的對象中。使用值類型的ToString方法可以避免裝箱操作,從而提高應用程序性能。

        運用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必要要用的情況之下。
       適當使用一些優化技巧,有助於程序運行速度,軟硬件合適配置,對於一個開發者來說也是一項深遠的工程。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章