自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

ASP.NET編程中的十大技巧(一)

開發(fā) 后端
在本文中,我們將討論編程人員在asp.net編程中需要注意的10個(gè)技巧,這些技巧涉及從缺省的控件、表單名的改變到StringBuilder類的使用,有助于編程人員能夠盡快地適應(yīng).NET環(huán)境。

1、在使用Visual Studio .net時(shí),除直接或非引用的對象外,不要使用缺省的名字。

.net帶來的好處之一是所有的源代碼和配置文件都是純文本文件,能夠使用Notepad或WordPad等任意的文本編輯器進(jìn)行編輯。如果不愿意,我們并非一定要使用Visual Studio .net作為集成開發(fā)環(huán)境。但使用了Visual Studio .net,我們可以在Windows文件管理器中看到文件,或在Visual Studio .net之外從文本編輯器中瀏覽文件的內(nèi)容。

使用Visual Studio .net作為集成開發(fā)環(huán)境有許多好處,其中最顯著的好處是它極大地提高了生產(chǎn)效率。使用Visual Studio. NET,我們能夠在付出較小代價(jià)的情況下更快地開發(fā)軟件。作為集成開發(fā)環(huán)境一部分的IntelliSense提供自動的代碼完成、在輸入方法或函數(shù)時(shí)提供動態(tài)幫助、語法錯(cuò)誤的實(shí)時(shí)提示,以及其他能夠提高生產(chǎn)效率的功能。

象其他復(fù)雜的工具那樣,在學(xué)會如何充分發(fā)揮它的作用和掌握其“習(xí)性”前,Visual Studio .net也會使我們產(chǎn)生一種挫折感。有時(shí),它象一個(gè)難以了解的黑盒子,會生成大量的文件和許多無用的代碼。

Visual Studio .net的一個(gè)功能是,無論是類、控件或表單中的對象,它都能夠?yàn)樾聦ο筇峁┤笔∶?。例如,如果我們?chuàng)建了一個(gè)新的asp.net Web Application,其缺省的名字將是WebApplication1。我們可以在“新工程”對話框中方便地改變該應(yīng)用的名字,但同時(shí)改變的只是該應(yīng)用程序的名字空間的名字及其所在的虛擬目錄,源代碼文件的缺省名字仍然是WebForm1.aspx和WebForm1.aspx.cs(C#工程)或WebForm1.aspx.vb(VB.net工程)。

我們可以在方案瀏覽器中改變ASPX和代碼使用的文件名字,但Web頁類的名字仍然將是WebForm1。如果在該Web表單上生成一個(gè)按鈕,其缺省的名字將是Button1。事實(shí)上,所有控件的名字都是由控件的類型和數(shù)字組成的。

我們能夠,也應(yīng)該將應(yīng)用程序中所有的表單和控件的名字都修改成有意義的名字。對于較小的演示性程序而言,缺省的名字還能夠勝任,但如果應(yīng)用程序由多個(gè)表單,每個(gè)表單上有許多按鈕和標(biāo)簽時(shí),象frmStartup、frmDataEntry和frmReports這樣的表單名就比Form1、Form2和Form3這樣的名字更易于理解和維護(hù)。

如果表單上控件要在代碼的其他地方引用,使它有一個(gè)有意義的名字就更重要了。btnOK、btnCancel和btnPrint這樣的名字使看代碼的人更容易理解,因而,也比名字為Button1、Button2、Button3這樣的控件更容易維護(hù)。

修改一個(gè)工程中所有文件中出現(xiàn)的一個(gè)名字的一個(gè)好方法是,在Visual Studio .net菜單中依次選擇“編輯”->“發(fā)現(xiàn)和替換”->“替換”命令。

在看二周前編寫的代碼時(shí),我們經(jīng)常就象第一次見到這些代碼一樣,因此使它們有一個(gè)有助于我們理解其含義的名字是十分有必要的。

2、即使不使用Visual Studio .net進(jìn)行編程,使用代碼支持文件也有利于提高應(yīng)用程序的性能

在Web應(yīng)用程序、Web服務(wù)或Web控件等所有的asp.net Web工程中,Visual Studio .net都使用代碼支持文件。代碼支持文件使工程具有更好的組織、模塊性,更適合多人組成的開發(fā)團(tuán)隊(duì)。另外,它還會帶來性能的提高。

代碼支持文件的內(nèi)容被編譯成一個(gè)組合文件中的類,一般是一個(gè)DLL文件,有時(shí)也可以是EXE文件。該文件駐留在應(yīng)用程序的組合體高速緩沖區(qū)中,在應(yīng)用程序啟動時(shí),可以立即得到它。

如果代碼是包含在<script>標(biāo)記中或ASPX文件代碼中,它仍然會被編譯成一個(gè)Web頁類。在這種情況下,每當(dāng)該網(wǎng)頁在應(yīng)用程序?qū)υ捴械谝淮渭虞d時(shí),都需要重新進(jìn)行編譯,被編譯的類就會駐留在內(nèi)存中。每當(dāng)計(jì)算機(jī)啟動、IIS停止、重新啟動或者源代碼、配置文件改變時(shí),該文件必須重新編譯。盡管不大,但這樣引起的性能損耗也是相當(dāng)可觀的。

3、盡量減少表單回送

每當(dāng)點(diǎn)擊Web網(wǎng)頁上的Button、LinkButton或ImageButton控件時(shí),表單就會被發(fā)送到服務(wù)器上。如果控件的AutoPostBack屬性被設(shè)置為true,如果CheckBox、CheckBoxList等控件的狀態(tài)被改變后,也會使表單會發(fā)送回服務(wù)器。

每次當(dāng)表單被發(fā)送回服務(wù)器,就會被重新加載,啟動Page_Load事件,執(zhí)行Page_Load事件處理程序中的所有代碼。把網(wǎng)頁的初始化代碼放在這里是最合適不過的了。我們經(jīng)常會希望在每次加載網(wǎng)頁時(shí)執(zhí)行一些代碼,而希望只有在網(wǎng)頁第一次加載時(shí)執(zhí)行另一些代碼,甚至希望一些代碼在除首次加載外的每次加載時(shí)執(zhí)行。

可以利用IsPostBack特性來完成這一功能。在網(wǎng)頁第一次加載時(shí),該屬性的值是false。如果網(wǎng)頁因回送而被重新加載,IsPostBack屬性的值就會被設(shè)置為true。通過測試,可以在任意時(shí)候執(zhí)行指定的代碼。下面是相關(guān)的C#代碼:

  1. protected void Page_Load(Object sender, EventArgs e)  
  2.  
  3. {  
  4.  
  5. // 網(wǎng)頁每次加載時(shí),執(zhí)行的一些操作  
  6.  
  7. if (!IsPostBack)  
  8.  
  9. {  
  10.  
  11. // 網(wǎng)頁第一次加載時(shí)執(zhí)行的操作  
  12.  
  13. }  
  14.  
  15. else 
  16.  
  17. {  
  18.  
  19. // 回送時(shí)執(zhí)行的操作  
  20.  
  21. }  
  22.  
  23. // 網(wǎng)頁每次加載時(shí)執(zhí)行的操作  
  24.  
  25. }  
  26.  

我們希望盡量不引起回送(每次回送都會要求服務(wù)器進(jìn)行一系列的操作),即使引起回送后。也希望能夠執(zhí)行盡量少的操作。大規(guī)模、浪費(fèi)時(shí)間的操作(例如數(shù)據(jù)庫查找)尤其應(yīng)當(dāng)避免,因?yàn)樗鼈兡軌蜓娱L應(yīng)用程序的響應(yīng)時(shí)間。

4、使用StringBuilder類

字符串在.net框架中是不可變的,這意味著改變字符串的操作符和方法會返回字符串的改變后的拷貝,這意味著性能還有提高的空間。當(dāng)進(jìn)行大量的字符串操作時(shí),使用StringBuilder類就是一種比較好的選擇了。

下面的C#代碼測試用二種方式從10000個(gè)子字符串中生成字符串所需要的時(shí)間。第一次使用了一個(gè)簡單的字符串串聯(lián)操作;第二次使用了StringBuilder類。要想查看結(jié)果字符串,可以去掉下面的代碼中注解行的注解符號:

  1. <%@ Page Language="C#" %>  
  2.  
  3. <script runat="server">  
  4.  
  5. void Page_Load(Object Source, EventArgs E)  
  6.  
  7. {  
  8.  
  9. int intLimit = 10000;  
  10.  
  11. DateTime startTime;  
  12.  
  13. DateTime endTime;  
  14.  
  15. TimeSpan elapsedTime;  
  16.  
  17. string strSub;  
  18.  
  19. string strWhole = "";  
  20.  
  21. // 首先執(zhí)行字符串連接操作  
  22.  
  23. startTime = DateTime.Now;  
  24.  
  25. for (int i=0; i < intLimit; i++)  
  26.  
  27. {  
  28.  
  29. strSub = i.ToString();  
  30.  
  31. strWhole = strWhole + " " + strSub;  
  32.  
  33. }  
  34.  
  35. endTime = DateTime.Now;  
  36.  
  37. elapsedTime = endTime - startTime;  
  38.  
  39. lblConcat.Text = elapsedTime.ToString();  
  40.  
  41. // lblConcatString.Text = strWhole;  
  42.  
  43. // 使用stringBuilder類進(jìn)行同樣的操作  
  44.  
  45. startTime = DateTime.Now;  
  46.  
  47. StringBuilder sb = new StringBuilder();  
  48.  
  49. for (int i=0; i < intLimit; i++)  
  50.  
  51. {  
  52.  
  53. strSub = i.ToString();  
  54.  
  55. sb.Append(" ");  
  56.  
  57. sb.Append(strSub);  
  58.  
  59. }  
  60.  
  61. endTime = DateTime.Now;  
  62.  
  63. elapsedTime = endTime - startTime;  
  64.  
  65. lblBuild.Text = elapsedTime.ToString();  
  66.  
  67. // lblBuildString.Text = sb.ToString();  
  68.  
  69. }  
  70.  
  71. </script>  
  72.  
  73. <html>  
  74.  
  75. <body>  
  76.  
  77. <form runat="server">  
  78.  
  79. <h1>String Concatenation Benchmark</h1>  
  80.  
  81. Concatenation:  
  82.  
  83. <asp:Label  
  84.  
  85. id="lblConcat" 
  86.  
  87. runat="server"/>  
  88.  
  89. <br/>  
  90.  
  91. <asp:Label  
  92.  
  93. id="lblConcatString" 
  94.  
  95. runat="server"/>  
  96.  
  97. <br/>  
  98.  
  99. <br/>  
  100.  
  101. StringBuilder:  
  102.  
  103. <asp:Label  
  104.  
  105. id="lblBuild" 
  106.  
  107. runat="server"/>  
  108.  
  109. <br/>  
  110.  
  111. <asp:Label  
  112.  
  113. id="lblBuildString" 
  114.  
  115. runat="server"/>  
  116.  
  117. </form>  
  118.  
  119. </body>  
  120.  
  121. </html>  
  122.  

二種方式的差別是相當(dāng)大的:使用StringBuilder類的Append方法的速度比使用字符串連接的速度快近200倍。

5、只在必要時(shí)使用服務(wù)器端控件

asp.net中新引入了一種在服務(wù)器端運(yùn)行的被稱作Web Server Controls的控件,在代碼中,它們經(jīng)常通過下面的語法被說明:

<asp:TextBox id="txtLastName" size="40" runat="server" />

它們有時(shí)也被稱作ASP控件。服務(wù)器端控件是由runat屬性指示的,它的值總是“server”。

通過添加runat屬性,一般的HTML控件可以被很方便地轉(zhuǎn)換到服務(wù)器端運(yùn)行,下面是一個(gè)簡單的例子:

<input type="text" id="txtLastName" size="40" runat="server" />

可以通過id屬性中指定的名字,我們可以引用程序中的控件,可以通過編程的方式設(shè)置屬性和獲得值,因此,服務(wù)器端處理方式有較大的靈活性。

這種靈活性是有一定代價(jià)的。每種服務(wù)器端控件都會消耗服務(wù)器上的資源。另外,除非控件、網(wǎng)頁或應(yīng)用程序明確地禁止view state,控件的狀態(tài)是包含在view state的隱藏域中,并在每次回送中都會被傳遞,這會引起嚴(yán)重的性能下降。

在這方面的一個(gè)很好的例子是,網(wǎng)頁上控件表格的應(yīng)用,如果不需要在代碼中引用表格中的元素,則使用無需進(jìn)行服務(wù)器端處理的HTML表格。我們?nèi)匀豢梢栽贖TML表格單元中放置服務(wù)器控件,并在代碼中引用服務(wù)器控件。如果需要引用任意的表格元素,例如指定的單元,則整個(gè)表格必須是服務(wù)器控件。

這是asp.net編程十大技巧的前五個(gè),后五個(gè)技巧將在asp.net編程十大技巧(二)中給大家介紹。

【編輯推薦】

  1. 淺談ASP.NET MVC框架
  2. 介紹ASP.NET MVC中的MvcAjaxPanel
  3. ASP.NET MVC框架拯救UpdatePanel
  4. 用ASP.NET MVC源代碼尋找解決方案
  5. ASP.NET MVC框架的ActionInvoker

責(zé)任編輯:book05 來源: hi.baidu
相關(guān)推薦

2009-07-23 13:23:53

ASP.NET編程

2009-07-24 11:25:15

asp.net編程

2010-11-30 09:09:35

2010-05-07 08:59:50

ASP.NET

2011-08-15 10:03:48

ASP.NET站點(diǎn)

2009-07-24 12:14:17

asp.net技巧

2009-08-03 13:38:18

ASP.NET編程模型

2010-12-30 09:49:28

IT博客大賽ASP.NETIT博客

2009-07-24 18:02:46

ASP.NET編程

2009-07-24 15:41:00

ASP.NET編程入門

2009-01-03 09:34:30

ASP.NET.NET性能優(yōu)化

2009-08-03 17:35:07

ASP.NET WebASP.NET編程工具

2009-02-25 14:51:05

應(yīng)用程序設(shè)計(jì)ASP.NET.NET

2009-07-24 10:10:22

ASP.NET

2009-07-24 16:17:42

WebRequestEASP.NET

2020-07-10 06:10:14

Python開發(fā)代碼

2009-07-22 17:13:21

Asp.Net編程

2009-07-29 13:32:06

ASP.NET控件使用

2009-07-29 13:42:25

ASP.NET注釋

2011-06-28 14:30:48

Asp.net
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號