如何提高ASP.NET效能(1)—緩衝的使用

來源:互聯網
上載者:User

 

如果您在ASP.NET中編寫的代碼,那麼你需要通過以下幾點,以確保良好的效能:

◆ 你是否使用緩衝嗎?

◆ 你是否使用工作階段狀態?

◆ 你使用的應用程式狀態嗎?

◆ 你使用線程和同步功能?

◆ 你資源的有效管理呢?

◆ 你有效地管理字串?

◆ 你有效地管理例外?

◆ 有你最佳化你的網頁?

◆ 你使用檢視狀態?

◆ 你使用伺服器控制項嗎?

◆ 你從你的頁面訪問資料嗎?

◆ 你可以使用資料繫結嗎?

◆ 你從ASPX頁面調用Unmanaged 程式碼?

◆ 你有沒有審查Machine.config中的設定嗎?

您使用緩衝嗎?

使用下面的複習題,以評估您的代碼使用ASP.NET緩衝功能:

◆ 你有太多的變化輸出緩衝嗎?

檢查您的網頁,使用輸出緩衝,以確保數量變化有限制。輸出快取頁面面太多的變化可以導致記憶體使用量量的增加。您可以識別的網頁,使用搜尋字串“OutputCache”輸出緩衝。

◆ 你能使用輸出緩衝?

在審查您的網頁時,開始問自己:如果可以緩衝整個頁面 。如果整個頁面不能被緩衝,可以把它的部分被緩衝?即使資料不是一成不變的,可以考慮使用輸出緩衝 。如果您的內容並不需要在近即時傳送,考慮輸出緩衝。

使用輸出緩衝緩衝,無論是整個頁面或部分頁面可以顯著提高效能 。

◆ 有,將更好地儲存在緩衝中的待用資料?

識別應用程式端的資料是靜態還是很少更新。這種類型的資料存放區在緩衝中的一個偉大的候選人。

◆ 你訪問緩衝中的項目為空白值之前檢查嗎?

前檢查null訪問緩衝的項目,如下面的程式碼片段所示,您可以提高效能。

 
  1. Object item = Cache["myitem"];  
  2. if (item==null)  
  3. {  
  4.     // repopulate the cache  

這有助於避免任何導致的異常Null 物件。為了找到你的代碼在您訪問緩衝。

您使用工作階段狀態?

使用下面的複習題,審查代碼的使用工作階段狀態:

◆ 你不需要時禁用工作階段狀態?

預設情況下,工作階段狀態仍然。如果您的應用程式不使用工作階段狀態,禁用它在Web.config檔案如下:

如果您的應用程式的某些部分需要工作階段狀態,確定不使用它,這些頁面禁用它通過使用下面的頁面層級屬性的頁面。

◆ 最大限度地減少使用的工作階段狀態,增加了應用程式的效能。

◆ 你有頁面不寫一個會話嗎?

使用工作階段狀態的頁面請求在內部使用ReaderWriterLock,管理工作階段狀態的訪問。對於唯讀會話資料的網頁,,考慮的EnableSessionState設定為ReadOnly。

 
  1. <%@ Page EnableSessionState="ReadOnly" . . .%> 

這是特別有用,當您使用HTML架構。預設設定(由於ReaderWriterLock)頁面執行序列化。將它設定為唯讀,可以防止阻塞和允許更多的並行。

◆ 你檢查之前在工作階段狀態的訪問中的項目為空白值?

為空白,然後再訪問該項目的檢查,在下面的代碼所示,您可以提高效能。

 
  1. object item = Session["myitem"];  
  2. if(item==null)  
  3. {  
  4.     // do something else  

常見的錯誤,從工作階段狀態中檢索資料時是不檢查,如果資料是空的,前訪問,然後捕獲由此導致的異常。你應該避免這種情況,因為異常是昂貴的。要找到你的代碼訪問工作階段狀態,你可以搜尋字串“會議”。

◆ 你複雜的Object Storage Service在工作階段狀態嗎?

避免複雜的Object Storage Service在工作階段狀態,特別是如果你使用一個徹頭徹尾的進程外工作階段狀態儲存。當使用進程外工作階段狀態,對象被序列化和還原序列化的每個請求,從而降低效能。

◆ 你STA COMObject Storage Service在工作階段狀態嗎?

儲存在工作階段狀態中的單一執行緒 Apartment(STA)COM對象會導致線程關聯,因為會話綁定到原來的線程上建立該組件。這嚴重影響效能和可擴充性。確保您使用以下頁面層級屬性在任何網頁上,STA COMObject Storage Service在工作階段狀態。

這力量運行頁面的STA線程池,避免任何昂貴的公寓開關從預設的多執行緒 Apartment(MTA)為ASP.NET線程池。在可能的情況下,避免使用STA COM對象。

你使用應用程式狀態嗎?

使用下面的複習題,如何有效地評估你的代碼使用應用程式狀態:

◆ 你STA COM組件儲存在應用程式的狀態?

避免STA COM組件儲存在應用程式的狀態在可能的情況下。這樣做有效地瓶頸您的應用程式到一個單獨的執行線程訪問組件時。在可能的情況下,應避免使用STA COM對象。

◆ 你使用的應用程式狀態字典嗎?

用於儲存唯讀值可以設定在應用程式初始化時,不改變之後,你應該使用的應用程式的狀態字典。要知道在代碼中使用時,應用程式的狀態,如以下幾個問題:

分配到應用程式變數的儲存的記憶體沒有被釋放,除非它們被取出或更換。

應用程式狀態不是Web場或Web園 - 共用儲存在應用程式狀態中的變數是全球性的的特定應用程式運行過程中,。每個應用程式進程可以有不同的價值觀。

◆ 考慮使用以下替代應用程式的狀態:

為應用程式而不是使用狀態字典建立的靜態屬性。它是更有效訪問狀態字典尋找比一個靜態屬性。例如,考慮下面的代碼:

這是更有效地使用下面的代碼:

使用設定檔,用於儲存應用程式的配置資訊。

考慮快取資料是足夠的揮發性,它不能儲存在應用程式的狀態,但需要定期更新緩衝中的對象,從一個持久化介質。

使用會話儲存使用者特定的資訊。你可以找出你的代碼的地方使用搜尋字串“應用”應用程式的狀態。

你使用應用程式狀態嗎?

NET Framework公開各種線程和同步功能,您的代碼中使用多線程的方式可以有一個應用程式的效能和可擴充性的顯著影響。使用下面的複習題,到如何有效地評估你的ASP.NET代碼使用線程:

◆ 你建立線程每個請求的基礎上?

避免手動建立ASP.NET應用程式中的線程。建立線程是一項昂貴的的操作,需要初始化託管和非託管的資源。如果你需要額外的線程來執行工作,使用CLR線程池。為了找到你的代碼的地方,你正在建立線程,搜尋字串“的ThreadStart”。

◆ 你執行長時間啟動並執行阻塞操作嗎?

避免堵在你的ASP.NET應用程式在可能的情況下操作。如果你必須執行一個長時間啟動並執行任務,然後再考慮使用非同步執行(如果你可以自由調用線程)或使用非同步“火,忘記”模型。

資源的有效管理呢?

使用以下的檢討,以評估您的代碼如何有效地使用資源的問題:

你明確地關閉資源?

確保您的代碼明確關閉對象實現IDisposable介面通過調用對象的Dispose或Close方法。未能關閉資源和迅速,可導致記憶體消耗增加,表現不佳。

沒有關閉資料庫連接,是一個普遍問題。使用finally塊(或在C#中使用的塊)來釋放這些資源,以確保資源被關閉,即使發生異常。

池共用資源呢?

檢查您使用池訪問共用資源時,以提高效能。確保共用資源,如資料庫連接和服務元件,可以彙集,正在彙集。沒有集中,你的代碼即被初始化的開銷每個共用資源的使用時間。

你晚擷取資源和早期釋放他們?

開啟共用資源之前,你需要他們,只要你完成他們釋放。持有時間比你需要的人士,到資源,增加記憶體的壓力,並增加對這些資源的競爭,如果他們共用。

你塊資料轉送I / O調用嗎?

如果你需要在塊I / O調用的資料轉送,分配和針塊用於發送和接收緩衝區。如果您需要進行並發的I / O調用,你應該建立一個固定的回收這是在不同的客戶,而不是每個請求的基礎上建立一個緩衝區的緩衝區池。這可以協助您避免堆片段和減少緩衝區的建立時間。

您有效地管理弦樂?

使用下面的複習題,以評估如何有效地你的ASP.NET代碼操縱字串:

你使用的格式化輸出的Response.Write嗎?

確定你的代碼在您串連輸出,如建立一個表,並考慮使用Response.Write來代替。回複於書面內容給用戶端的最有效方法。

你使用StringBuilder來連接字串嗎?

如果追加數量是未知的,你不能發送資料到用戶端使用的Response.Write立即的,使用StringBuilder類來連接字串。

你=連接字串+嗎?

確定在你的代碼的地方,你使用+ =運算子執行字串串聯。如果追加的數量是未知的,或你追加一個未知大小的資料,考慮使用StringBuilder類來代替。

您有效地管理例外?

使用以下審查問題,如何有效地評估您的代碼中使用異常:

有你在Global.asax中實現了一個錯誤處理程式?

雖然落實在Global.asax中的錯誤處理程式不一定提高效能,它可以協助您確定您的應用程式,在發生意外異常。您找出發生的異常後,採取適當的行動,以避免這些例外。

你使用的try /可支配資源終於?

確保在finally塊中釋放,以確保他們得到清除,即使在例外狀況事件,可支配資源。不處置的資源,是一個普遍問題。

請問你的代碼,避免異常?

你的代碼應該試圖避免例外,以提高效能,因為異常會導致顯著的開銷。使用以下方法:

檢查空值。

不要使用異常來控制常規應用程式邏輯。

不要捕獲異常,你不能處理和模糊有用的診斷資訊。

使用重載Server.Transfer方法Server.Transfer的(字串,BOOL),而不是Server.Transfer的,Response.Redirect,Response.End,以避免異常。

您最佳化您的網頁?

使用下面的複習題,評估aspx頁的效率。

你採取的步驟,以減少頁面大小?

盡量保持頁面大小到最低限度。較大的頁大小,因為增加的處理能力和網路頻寬利用率,從而可能導致網路擁塞的顯著增加CPU的負載增加。這兩個因素導致回應時間增加為客戶。考慮以下的指引,以協助減少頁面大小:

包括使用指令碼(指令碼,而不是點綴的HTML代碼標籤)。

從你的HTML中刪除多餘的空白字元。

禁用它不需要伺服器控制項的檢視狀態。

避免長時間的控制名稱。

最小化使用的圖形,並使用壓縮映像。

考慮使用階層式樣式表,以避免反覆相同的格式指令發送到用戶端。

緩衝禁用?

確保你有緩衝啟用。緩衝會導致伺服器緩衝輸出和發送後,才完成了處理頁面。如果緩衝被禁止,勞動者的過程,需要不斷流從所有的並發請求的響應,這可能是記憶體和處理器上的顯著的開銷,尤其是當你使用ASP.NET進程模型。要找出緩衝禁用,如果你有,你可以搜尋以下字串為您的程式碼程式庫:“緩衝區”和“BufferOutput。”確保緩衝區<pages>元素屬性設定為true,在您的應用程式的Web.config 檔案。

 
  1. <pages buffer="True"> 
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.