如何提高ASP.NET效能(2)—Response.Redirect

來源:互聯網
上載者:User

 

你使用Response.Redirect嗎?

搜尋你的代碼為“Response.Redirect”,並考慮更換與Server.Transfer的。這並不招致了一個新的請求成本,因為它避免了任何用戶端重新導向。

你不能總是簡單地取代Response.Redirect調用Server.Transfer的調用,因為Server.Transfer使用一個新的處理常式在執行的處理常式階段。Response.Redirect產生第二個請求。如果你需要不同的身分識別驗證和授權,緩衝,或其他運行時裝置上的目標,這兩個機制是不等價的。Response.Redirect導致一個額外的請求被發送到伺服器。Response.Redirect也使得使用者可見的網址。這可能需要在某些情況下,您要求使用者書籤的新位置。

你使用Page.IsPostBack?

檢查在你的頁面的邏輯使用Page.IsPostBack屬性,以減少多餘的處理,避免不必要的初始化成本。使用Page.IsPostBack屬性有條件地執行代碼,根據頁面是否是響應伺服器控制項事件產生,或者它是否是首次載入。

你驗證使用者輸入?

檢查,驗證使用者輸入用戶端上,以減少伺服器的往返行程。這也提供了更好的反饋給使用者。出於安全原因,確保任何用戶端驗證與對應的伺服器端驗證讚揚。

你有沒有制定明確和嚴格的真實?

確保您使用Option Strict和明確,以減少意外的後期綁定,當使用Visual Basic。NET中。

 
  1. <%@ Page Language="VB" Explicit="true" Strict="true" %> 

這可以很容易地搜尋,使用Regex的Findstr.exe進行檔案。

 
  1. C:\findstr /i /s /r /c:"<%.*@.*page.*%>" *.aspx  
  2. pag\default.aspx:<%@ Page Language="VB" %> 
  3. pag\login.aspx:<%@ page Language="VB" %> 
  4. pag\main.aspx:<%@ Page Language="VB" Explicit="true" Strict="true" %> 
  5. ... 

您已禁用調試?

檢查你的Web.config檔案,並確保調試設定為false 節和檢查。aspx頁,以確保調試設定為false。如果啟用了調試,編譯器不產生最佳化的代碼和頁面批次編譯。您可以通過使用Regex的Findstr.exe進行檔案。aspx頁。

 
  1. C:\pag>findstr /i /r /c:"<%.*@.*page.*debug=.*true*.*%>" *.aspx  
  2. login.aspx:<%@ page Language="VB" Debug="True" %> 
  3. main.aspx:<%@ Page Language="c#" Debug="True" %> 

您已禁用跟蹤?

檢查您的Web.config檔案,以確保在部分禁用跟蹤。另外,請檢查你的。aspx頁,以確保跟蹤設定為false。您可以通過使用Regex的Findstr.exe進行檔案。aspx頁。

 
  1. C:\pag>findstr /i /r /c:"<%.*@.*page.*trace=.*true*.*%>" *.aspx  
  2. login.aspx:<%@ page Language="VB" Trace="True" %> 
  3. main.aspx:<%@ Page Language="c#" Trace="True" %> 

你積極的逾時嗎?

設定逾時積極相應調整。評估每一頁,並確定一個合理的逾時。預設頁是在Machine.config執行逾時屬性指定逾時90秒。伺服器資源舉行,直到請求被處理完全或執行時間,以較早者為準。在大多數情況下,使用者不必等待這樣一個長時間才能完成的請求。他們要麼完全放棄請求,或發送一個新的請求,這進一步增加了伺服器上的負載。

您使用檢視狀態?

使用下面的複習題,以評估您的應用程式如何有效地使用檢視狀態:

你禁用檢視狀態時,它不需要?

每一頁的評估,以確定是否需要查看狀態啟用。檢視狀態會增加開銷每個請求。開銷包括增加頁面發送到用戶端,以及一個序列化和還原序列化成本的大小。你不需要查看在下列條件下的狀態:

頁面不回自己的頁面僅用於輸出和不依賴於響應處理。

你的頁面的伺服器控制項不處理事件,你有沒有動態或資料繫結的屬性值(或他們是在每個請求的代碼)。

如果你忽略的舊資料,並重新填充的伺服器控制每次重新整理頁面。

您已經採取步驟,以減少您的檢視狀態的大小嗎?

評估每一頁的檢視狀態的使用。要確定一個頁面的檢視狀態的大小,您可以啟用跟蹤,看看每個每個控制如何使用它。控制控制的基礎上,禁用檢視狀態。

你使用伺服器控制項嗎?

使用下面的複習題,檢討如何有效地你的ASP.NET應用程式使用伺服器控制項:

你使用伺服器控制項時,你不需要嗎?

評估您的伺服器控制項的使用,以確定是否可以替換他們具有重量輕HTML控制項或可能是靜態文本。你也許可以在下列情況下更換一個伺服器控制項:

在控制顯示的資料是靜態,例如,一個標籤。

你並不需要以編程方式訪問在伺服器端控制。

控制顯示的是唯讀資料。

在回處理過程中不需要控制。

你有伺服器控制的深層次嗎?

伺服器控制項嵌套很深的層次複合的建設控制樹成本。考慮呈現的內容自己使用Response.Write或建立一個自訂的控制,並呈現。要確定的控制和控制層次,使頁面的跟蹤。

您從您的ASPX頁面訪問資料嗎?

大多數ASP.NET應用程式需要某種形式的資料訪問。資料訪問的效能和可擴充性問題發現一個共同的地方。審查以下問題,以協助改善您的應用程式的頁面層級的資料訪問:

你頁大的結果集?

確定您的應用程式領域,大的結果集顯示和考慮分頁的結果。大的結果集顯示給使用者,可以對效能有顯著影響。

你使用資料集時,你可以使用DataReaders嗎?

如果你不需要快取資料,層與層之間或資料的交換資料繫結到一個控制和只需要只進,唯讀訪問資料,然後使用DataReader,而不是。

您可以使用資料繫結嗎?

使用下面的複習題,審查代碼的資料繫結使用:

你用的Page.DataBind嗎?

避免調用的Page.DataBind和單獨的每個控制項綁定最佳化您的資料繫結。調用的Page.DataBind遞迴調用上的每個頁面上的控制項的DataBind。

你使用的DataBinder.Eval嗎?

DataBinder.Eval的使用反射,從而影響效能。在大多數情況下,DataBinder.Eval的被稱為從一個頁面內多次,因此,實施替代方法提供了一個很好的機會,以提高效能。

避免以下做法:

 
  1. <itemtemplate> 
  2. <table><tbody><tr> 
  3. <td><%# DataBinder.Eval(Container.DataItem,"field1") %></td> 
  4. <td><%# DataBinder.Eval(Container.DataItem,"field2") %></td> 
  5. </tr></tbody></table> 
  6. </itemtemplate> 

使用顯式轉換。它提供了更好的效能,避免反射的成本。投作為一個DataRowView Container.DataItem,如果資料來源是DataSet。

 
  1. <itemtemplate> 
  2. <table><tbody><tr> 
  3. <td><%# ((DataRowView)Container.DataItem)["field1"] %></td> 
  4. <td><%# ((DataRowView)Container.DataItem)["field2"] %></td> 
  5. </tr></tbody></table> 
  6. </itemtemplate> 

投作為一個String Container.DataItem如果資料來源是一個數組或一個ArrayList。

 
  1. <itemtemplate> 
  2. <table><tbody><tr> 
  3. <td><%# ((String)Container.DataItem)["field1"] %></td> 
  4. <td><%# ((String)Container.DataItem)["field2"] %></td> 
  5. </tr></tbody></table> 
  6. </itemtemplate> 

aspx頁面調用Unmanaged 程式碼嗎?

使用下面的複習題,審查代碼的互通性使用:

你有沒有啟用調用STA COM組件ASPCOMPAT嗎?

確保任何頁面調用STA COM組件ASPCOMPAT頁面層級屬性設定。這將指示ASP.NET使用STA線程池線程來執行當前頁面的請求。預設情況下,ASP.NET使用MTA線程池來處理頁面請求。如果您正在使用STA元件,組件綁定到建立的線程。這將導致一個從線程池中的線程STA對象是建立的線程昂貴的線程切換。

你建立STA COM組件在頁面的構造?

檢查您的網頁,以確保您沒有建立STA COM組件在頁面的構造。建立STA組件中的Page_Load,Page_Init或其他事件,而不是。頁面的建構函式總是一個MTA線程上執行。當STA COM組件是從一個MTA線程建立,建立STA COM組件在主機上的STA線程。在同一個線程(主機STA)執行Apartment 執行緒元件從MTA線程建立的所有執行個體。這意味著,即使所有的使用者都有他們自己的COM組件執行個體的引用,所有到這些組件的調用序列化這一個線程,並在同一時間只有一個呼叫執行。這將有效地瓶頸一個單獨的線程的頁面,並造成重大的效能下降。如果您使用的是AspCompat屬性,這些事件運行一個線程使用STA線程池,它在一個較小的效能結果擊中由於線程切換。

你用Server.Create對象嗎?

避免使用Server.CreateObject和早期繫結到您的組件在編譯時間儘可能。Server.CreateObject的使用後期綁定,主要是為了向後相容提供。搜尋您的程式碼程式庫,看看是否使用這個常式,作為替代,建立Interop 組件,利用早期繫結的優勢。

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

使用下面的複習題,審查您的應用程式的部署計劃:

調整適當的線程池?

CLR線程池調整適當的調整,提高了效能顯著。在部署應用程式之前,確保該線程池已調整為您的應用程式。

適當配置的記憶體限制?

配置ASP.NET記憶體限制,確保最佳的ASP.NET緩衝的效能和伺服器的穩定性。在IIS 5.0中,或者當您使用在IIS 6.0的ASP.NET進程模型,配置Machine.config中的記憶體限制。在IIS 6.0中,您使用IIS MMC嵌入式管理單元中配置的記憶體限制。

你刪除不必要的HttpModules?

包括的HttpModules,你不需要添加額外的開銷ASP.NET請求處理。檢查您已刪除或注釋掉在未使用的HttpModules 的Machine.config。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.