日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

淺談asp.net程序優(yōu)化技巧(2)_.Net教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:如何在GridView數(shù)據(jù)源為空時也顯示表頭
首先,需要GridView的AutoGenerateColumn屬性為false。 進行正常的綁定后,添加頁面事件 this.PreRender+=OnPagePreRender; 這個事件只要比綁定晚就可以,不必非得是PreRender。 然后判斷如果數(shù)據(jù)源無數(shù)據(jù),就執(zhí)行以下代碼 if (gridView.DataSource is DataTa


        11. 將調(diào)用密集型的 COM 組件遷移到托管代碼
  。NET Framework 提供了一個簡單的方法與傳統(tǒng)的 COM 組件進行交互。其優(yōu)點是可以在保留現(xiàn)有投資的同時利用新的平臺。但是在某些情況下,保留舊組件的性能開銷使得將組件遷移到托管代碼是值得的。每一情況都是 不一樣的,決定是否需要遷移組件的最好方法是對 Web 站點運行性能測量。建議您研究一下如何將需要大量調(diào)用以進行交互的任何 COM 組件遷移到托管代碼。
  許多情況下不可能將舊式組件遷移到托管代碼,特別是在最初遷移 Web 應(yīng)用程序時。在這種情況下,最大的性能障礙之一是將數(shù)據(jù)從非托管環(huán)境封送到托管環(huán)境。因此,在交互操作中,請在任何一端執(zhí)行盡可能多的任務(wù),然后進行一個 大調(diào)用而不是一系列小調(diào)用。例如,公共語言運行庫中的所有字符串都是 Unicode 的,所以應(yīng)在調(diào)用托管代碼之前將組件中的所有字符串轉(zhuǎn)換成 Unicode 格式。
  另外,一處理完任何 COM 對象或本機資源就釋放它們。這樣,其他請求就能夠使用它們,并且最大限度地減少了因稍后請求垃圾回收器釋放它們所引起的性能問題。

  12. 在 Visual Basic .NET 或 JScript 代碼中使用早期綁定
  以往,開發(fā)人員喜歡使用 Visual Basic、VBScript 和 JScript 的原因之一就是它們所謂“無類型”的性質(zhì)。變量不需要顯式類型聲明,并能夠簡單地通過使用來創(chuàng)建它們。當從一個類型到另一個類型進行分配時,轉(zhuǎn)換將自動執(zhí) 行。不過,這種便利會大大損害應(yīng)用程序的性能。
  Visual Basic 現(xiàn)在通過使用 Option Strict 編譯器指令來支持類型安全編程。為了向后兼容,默認情況下,ASP.NET 不啟用該選項。但是,為了得到最佳性能,強烈建議在頁中啟用該選項。若要啟用 Option Strict,請將 Strict 屬性包括在 @ Page 指令中,或者,對于用戶控件,請將該屬性包括在 @ Control 指令中。下面的示例演示了如何設(shè)置該屬性,并進行了四個變量調(diào)用以顯示使用該屬性是如何導(dǎo)致編譯器錯誤的。 
  <%@ Page Language="VB" Strict="true" %>         <%         Dim B         Dim C As String         ’ This will cause a compiler error.         A = "Hello"         ’ This will cause a compiler error.         B = "World"         ’ This will not cause a compiler error.         C = "!!!!!!"         ’ But this will cause a compiler error.         C = 0         %>    
 
  JScript .NET 也支持無類型編程,但它不提供強制早期綁定的編譯器指令。若發(fā)生下面任何一種情況,則變量是晚期綁定的:
  被顯式聲明為 Object.
  是無類型聲明的類的字段。
  是無顯式類型聲明的專用函數(shù)或方法成員,并且無法從其使用推斷出類型。
  最后一個差別比較復(fù)雜,因為如果 JScript .NET 編譯器可以根據(jù)變量的使用情況推斷出類型,它就會進行優(yōu)化。在下面的示例中,變量 A 是早期綁定的,但變量 B 是晚期綁定的。
var A;
  var B;
  A = "Hello";
  B = "World";
  B = 0; 

  為了獲得最佳的性能,當聲明 JScript .NET 變量時,請為其分配一個類型。例如,var A : String. 

       13. 使請求管線內(nèi)的所有模塊盡可能高效
  請求管線內(nèi)的所有模塊在每次請求中都有機會被運行。因此,當請求進入和離開模塊時快速地觸發(fā)代碼至關(guān)重要,特別是在不使用模塊功能的代碼路徑里。分別在使用及不使用模塊和配置文件時執(zhí)行吞吐量測試,對確定這些方法的執(zhí)行速度非常有用。

  14. 使用 HttpServerUtility.Transfer 方法在同一應(yīng)用程序的頁面間重定向
 采用 Server.Transfer 語法,在頁面中使用該方法可避免不必要的客戶端重定向。

  15. 必要時調(diào)整應(yīng)用程序每個輔助進程的線程數(shù)
  ASP.NET 的請求結(jié)構(gòu)試圖在執(zhí)行請求的線程數(shù)和可用資源之間達到一種平衡。已知一個使用足夠 CPU 功率的應(yīng)用程序,該結(jié)構(gòu)將根據(jù)可用于請求的 CPU 功率,來決定允許同時執(zhí)行的請求數(shù)。這項技術(shù)稱作線程門控。但是在某些條件下,線程門控算法不是很有效。通過使用與 ASP.NET Applications 性能對象關(guān)聯(lián)的 Pipeline Instance Count 性能計數(shù)器,可以在 PerfMon 中監(jiān)視線程門控。

  當頁面調(diào)用外部資源,如數(shù)據(jù)庫訪問或 XML Web services 請求時,頁面請求通常停止并釋放 CPU.如果某個請求正在等待被處理,并且線程池中有一個線程是自由的,那么這個正在等待的請求將開始被處理。遺憾的是,有時這可能導(dǎo)致 Web 服務(wù)器上存在大量同時處理的請求和許多正在等待的線程,而它們對服務(wù)器性能有不利影響。通常,如果門控因子是外部資源的響應(yīng)時間,則讓過多請求等待資源, 對 Web 服務(wù)器的吞吐量并無幫助。

  為緩和這種情況,可以通過更改 Machine.config 配置文件 <processModel> 節(jié)點的 maxWorkerThreads 和 maxIOThreads 屬性,手動設(shè)置進程中的線程數(shù)限制。

  注意 輔助線程是用來處理 ASP.NET 請求的,而 IO 線程則是用于為來自文件、數(shù)據(jù)庫或 XML Web services 的數(shù)據(jù)提供服務(wù)的。

  分配給這些屬性的值是進程中每個 CPU 每類線程的最大數(shù)目。對于雙處理器計算機,最大數(shù)是設(shè)置值的兩倍。對于四處理器計算機,最大值是設(shè)置值的四倍。無論如何,對于有四個或八個 CPU 的計算機,最好更改默認值。對于有一個或兩個處理器的計算機,默認值就可以,但對于有更多處理器的計算機的性能,進程中有一百或兩百個線程則弊大于利。

  注意進程中有太多線程往往會降低服務(wù)器的速度,因為額外的上下文交換導(dǎo)致操作系統(tǒng)將 CPU 周期花在維護線程而不是處理請求上。

  16. 適當?shù)厥褂霉舱Z言運行庫的垃圾回收器和自動內(nèi)存管理

  小心不要給每個請求分配過多內(nèi)存,因為這樣垃圾回收器將必須更頻繁地進行更多的工作。另外,不要讓不必要的指針指向?qū)ο螅驗樗鼈儗⑹箤ο蟊3?nbsp;活動狀態(tài),并且應(yīng)盡量避免含 Finalize 方法的對象,因為它們在后面會導(dǎo)致更多的工作。特別是在 Finalize 調(diào)用中永遠不要釋放資源,因為資源在被垃圾回收器回收之前可能一直消耗著內(nèi)存。最后這個問題經(jīng)常會對 Web 服務(wù)器環(huán)境的性能造成毀滅性的打擊,因為在等待 Finalize 運行時,很容易耗盡某個特定的資源。

  17. 如果有大型 Web 應(yīng)用程序,可考慮執(zhí)行預(yù)批編譯

  每當發(fā)生對目錄的第一次請求時都會執(zhí)行批編譯。如果目錄中的頁面沒有被分析并編譯,此功能會成批分析并編譯目錄中的所有頁面,以便更好地利用磁 盤和內(nèi)存。如果這需要很長時間,則將快速分析并編譯單個頁面,以便請求能被處理。此功能帶給 ASP.NET 性能上的好處,因為它將許多頁面編譯為單個程序集。從已加載的程序集訪問一頁比每頁加載新的程序集要快。

  批編譯的缺點在于:如果服務(wù)器接收到許多對尚未編譯的頁面的請求,那么當 Web 服務(wù)器分析并編譯它們時,性能可能較差。為解決這個問題,可以執(zhí)行預(yù)批編譯。為此,只需在應(yīng)用程序激活之前向它請求一個頁面,無論哪頁均可。然后,當用戶 首次訪問您的站點時,頁面及其程序集將已被編譯。

  沒有簡單的機制可以知道批編譯何時發(fā)生。需一直等到 CPU 空閑或者沒有更多的編譯器進程(例如 csc.exe(C# 編譯器)或 vbc.exe(Visual Basic 編譯器))啟動。

  還應(yīng)盡量避免更改應(yīng)用程序的 \bin 目錄中的程序集。更改頁面會導(dǎo)致重新分析和編譯該頁,而替換 \bin 目錄中的程序集則會導(dǎo)致完全重新批編譯該目錄。

  在包含許多頁面的大規(guī)模站點上,更好的辦法可能是根據(jù)計劃替換頁面或程序集的頻繁程度來設(shè)計不同的目錄結(jié)構(gòu)。不常更改的頁面可以存儲在同一目錄中并在特定的時間進行預(yù)批編譯。經(jīng)常更改的頁面應(yīng)在它們自己的目錄中(每個目錄最多幾百頁)以便快速編譯。
  Web 應(yīng)用程序可以包含許多子目錄。批編譯發(fā)生在目錄級,而不是應(yīng)用程序級。 

       18. 不要依賴代碼中的異常
  因為異常大大地降低性能,所以您不應(yīng)該將它們用作控制正常程序流程的方式。如果有可能檢測到代碼中可能導(dǎo)致異常的狀態(tài),請執(zhí)行這種操作。不要在 處理該狀態(tài)之前捕獲異常本身。常見的方案包括:檢查 null,分配給將分析為數(shù)字值的 String 一個值,或在應(yīng)用數(shù)學(xué)運算前檢查特定值。下面的示例演示可能導(dǎo)致異常的代碼以及測試是否存在某種狀態(tài)的代碼。兩者產(chǎn)生相同的結(jié)果。

 try
  {
   result = 100 / num;
  }
  catch (Exception e)
  {
   result = 0;
  }
  // ...to this.
  if (num != 0)
   result = 100 / num;
  else
   result = 0; 

  19. 使用 HttpResponse.Write 方法進行字符串串聯(lián)
  該方法提供非常有效的緩沖和連接服務(wù)。但是,如果您正在執(zhí)行廣泛的連接,請使用多個 Response.Write 調(diào)用。下面示例中顯示的技術(shù)比用對 Response.Write 方法的單個調(diào)用連接字符串更快。 
 Response.Write("a"); 
  Response.Write(myString); 
  Response.Write("b"); 
  Response.Write(myObj.ToString()); 
  Response.Write("c"); 
  Response.Write(myString2); 
  Response.Write("d");  
 

  20. 除非有特殊的原因要關(guān)閉緩沖,否則使其保持打開
  禁用 Web 窗體頁的緩沖會導(dǎo)致大量的性能開銷。

  21. 只在必要時保存服務(wù)器控件視圖狀態(tài)
  自動視圖狀態(tài)管理是服務(wù)器控件的功能,該功能使服務(wù)器控件可以在往返過程上重新填充它們的屬性值(您不需要編寫任何代碼)。但是,因為服務(wù)器控 件的視圖狀態(tài)在隱藏的窗體字段中往返于服務(wù)器,所以該功能確實會對性能產(chǎn)生影響。您應(yīng)該知道在哪些情況下視圖狀態(tài)會有所幫助,在哪些情況下它影響頁的性 能。例如,如果您將服務(wù)器控件綁定到每個往返過程上的數(shù)據(jù),則將用從數(shù)據(jù)綁定操作獲得的新值替換保存的視圖狀態(tài)。在這種情況下,禁用視圖狀態(tài)可以節(jié)省處理 時間。
  默認情況下,為所有服務(wù)器控件啟用視圖狀態(tài)。若要禁用視圖狀態(tài),請將控件的EnableViewState 屬性設(shè)置為 false,如下面的 DataGrid 服務(wù)器控件示例所示。
  <asp:datagrid EnableViewState="false" datasource="……" runat="server"/>
  您還可以使用 @ Page 指令禁用整個頁的視圖狀態(tài)。當您不從頁回發(fā)到服務(wù)器時,這將十分有用:
  <%@ Page EnableViewState="false" %>
  注意 @ Control 指令中也支持 EnableViewState 屬性,該指令允許您控制是否為用戶控件啟用視圖狀態(tài)。
  若要分析頁上服務(wù)器控件使用的視圖狀態(tài)的數(shù)量,請(通過將 trace="true" 屬性包括在 @ Page 指令中)啟用該頁的跟蹤并查看 Control Hierarchy 表的 Viewstate 列。有關(guān)跟蹤和如何啟用它的信息,請參見 ASP.NET 跟蹤。

分享:揭秘ASP.NET中設(shè)置默認提交按鈕的代碼
publicstaticvoidSetDefEnterControl(System.Web.UI.ControlCtrl) { PagemPage=Ctrl.Page; stringmScript; mScript=@scriptlanguage=javascript; mScript=mScript+functiondocument.onkeydown(){; mScript=mScript+vare=event.srcElement;; mScript

來源:模板無憂//所屬分類:.Net教程/更新時間:2010-02-01
相關(guān).Net教程