編寫ASP_NET應(yīng)用程序的十大技巧_第1頁
編寫ASP_NET應(yīng)用程序的十大技巧_第2頁
編寫ASP_NET應(yīng)用程序的十大技巧_第3頁
編寫ASP_NET應(yīng)用程序的十大技巧_第4頁
編寫ASP_NET應(yīng)用程序的十大技巧_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、編寫ASP.NET 應(yīng)用程序的十大技巧 1、在使用Visual Studio .NET時,除直接或非引用的對象外,不要使用缺省的名字 .NET 帶來的好處之一是所有的源代碼和配置文件都是純文本文件,能夠使用Notepad 或WordPad 等任意的文本編輯器進行編輯。如果不愿意,我們并非一定要使用VisualStudio .NET 作為集成開發(fā)環(huán)境。但使用了Visual Studio .NET ,我們可以在Windows 文件管理器中看到文件,或在Visual Studio .NET之外從文本編輯器中瀏覽文件的內(nèi)容。 使用Visual Studio .NET作為集成開發(fā)環(huán)境有許多好處,其中最顯

2、著的好處是它極大地提高了生產(chǎn)效率。使用Visual Studio. NET,我們能夠在付出較小代價的情況下更快地開發(fā)軟件。作為集成開發(fā)環(huán)境一部分的IntelliSense 提供自動的代碼完成、在輸入方法或函數(shù)時提供動態(tài)幫助、語法錯誤的實時提示,以及其他能夠提高生產(chǎn)效率的功能。象其他復(fù)雜的工具那樣,在學(xué)會如何充分發(fā)揮它的作用和掌握其“習(xí)性”前,Visual Studio .NET 也會使我們產(chǎn)生一種挫折感。有時,它象一個難以了解的黑盒子,會生成大量的文件和許多無用的代碼。Visual Studio .NET的一個功能是,無論是類、控件或表單中的對象,它都能夠為新對象提供缺省名字。例如,如果我們創(chuàng)

3、建了一個新的ASP.NET Web Application,其缺省的名字將是WebApplication1。我們可以在“新工程”對話框中方便地改變該應(yīng)用的名字,但同時改變的只是該應(yīng)用程序的名字空間的名字及其所在的虛擬目錄,源代碼文件的缺省名字仍然是WebForm1.aspx 和WebForm1.aspx.cs(C#工程 或WebForm1.aspx.vb(VB.NET工程 。 我們可以在方案瀏覽器中改變ASPX 和代碼使用的文件名字,但Web 頁類的名字仍然將是WebForm1。如果在該Web 表單上生成一個按鈕,其缺省的名字將是Button1。事實上,所有控件的名字都是由控件的類型和數(shù)字組成

4、的。我們能夠,也應(yīng)該將應(yīng)用程序中所有的表單和控件的名字都修改成有意義的名字。對于較小的演示性程序而言,缺省的名字還能夠勝任,但如果應(yīng)用程序由多個表單,每個表單上有許多按鈕和標(biāo)簽時,象frmStartup 、frmDataEntry 和frmReports 這樣的表單名就比Form1、Form2和Form3這樣的名字更易于理解和維護。如果表單上控件要在代碼的其他地方引用,使它有一個有意義的名字就更重要了。btnOK 、btnCancel 和btnPrint 這樣的名字使看代碼的人更容易理解,因而,也比名字為Button1、Button2、Button3這樣的控件更容易維護。修改一個工程中所有文件

5、中出現(xiàn)的一個名字的一個好方法是,在Visual Studio.NET 菜單中依次選擇“編輯”->“發(fā)現(xiàn)和替換”->“替換”命令。 在看二周前編寫的代碼時,我們經(jīng)常就象第一次見到這些代碼一樣,因此使它們有一個有助于我們理解其含義的名字是十分有必要的。2、即使不使用Visual Studio .NET進行編程,使用代碼支持文件也有利于提高應(yīng)用程序的性能在Web 應(yīng)用程序、Web 服務(wù)或Web 控件等所有的ASP.NET Web工程中,Visual Studio .NET都使用代碼支持文件。代碼支持文件使工程具有更好的組織、模塊性,更適合多人組成的開發(fā)團隊。另外,它還會帶來性能的提高。代

6、碼支持文件的內(nèi)容被編譯成一個組合文件中的類,一般是一個DLL 文件,有時也可以是EXE 文件。該文件駐留在應(yīng)用程序的組合體高速緩沖區(qū)中,在應(yīng)用程序啟動時,可以立即得到它。如果代碼是包含在< script>標(biāo)記中或ASPX 文件代碼中,它仍然會被編譯成一個Web 頁類。在這種情況下,每當(dāng)該網(wǎng)頁在應(yīng)用程序?qū)υ捴械谝淮渭虞d時,都需要重新進行編譯,被編譯的類就會駐留在內(nèi)存中。每當(dāng)計算機啟動、IIS 停止、重新啟動或者源代碼、配置文件改變時,該文件必須重新編譯。盡管不大,但這樣引起的性能損耗也是相當(dāng)可觀的。3、盡量減少表單回送每當(dāng)點擊Web 網(wǎng)頁上的Button 、LinkButton 或I

7、mageButton 控件時,表單就會被發(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)頁時執(zhí)行一些代碼,而希望只有在網(wǎng)頁第一次加載時執(zhí)行另一些代碼,甚至希望一些代碼在除首次加載外的每次加載時執(zhí)行??梢岳肐sPostBack 特性來完成這一功能。在網(wǎng)頁第一次加載時,該屬性的值是fal

8、se 。如果網(wǎng)頁因回送而被重新加載,IsPostBack 屬性的值就會被設(shè)置為true 。通過測試,可以在任意時候執(zhí)行指定的代碼。下面是相關(guān)的C#代碼:protected void Page_Load(Object sender,EventArgs e/ 網(wǎng)頁每次加載時,執(zhí)行的一些操作if (!IsPostBack/ 網(wǎng)頁第一次加載時執(zhí)行的操作else/ 回送時執(zhí)行的操作/ 網(wǎng)頁每次加載時執(zhí)行的操作我們希望盡量不引起回送(每次回送都會要求服務(wù)器進行一系列的操作 ,即使引起回送后。也希望能夠執(zhí)行盡量少的操作。大規(guī)模、浪費時間的操作(例如數(shù)據(jù)庫查找 尤其應(yīng)當(dāng)避免,因為它們能夠延長應(yīng)用程序的響應(yīng)時間

9、。4、使用StringBuilder 類字符串在.NET 框架中是不可變的,這意味著改變字符串的操作符和方法會返回字符串的改變后的拷貝,這意味著性能還有提高的空間。當(dāng)進行大量的字符串操作時,使用StringBuilder 類就是一種比較好的選擇了。下面的C#代碼測試用二種方式從10000個子字符串中生成字符串所需要的時間。第一次使用了一個簡單的字符串串聯(lián)操作; 第二次使用了StringBuilder 類。要想查看結(jié)果字符串,可以去掉下面的代碼中注解行的注解符號:< % Page Language=”C#” %>< script runat=”server ”>void

10、Page_Load(Object Source, EventArgs E int intLimit = 10000;DateTime startTime;DateTime endTime;TimeSpan elapsedTime;string strSub;string strWhole = “”;/ 首先執(zhí)行字符串連接操作startTime = DateTime.Now;for (int i=0; i < intLimit; i+strSub = i.ToString(;strWhole = strWhole + “ “ + strSub; endTime = DateTime.Now

11、;elapsedTime = endTime - startTime;lblConcat.Text = elapsedTime.ToString(; / lblConcatString.Text = strWhole;/ 使用stringBuilder 類進行同樣的操作startTime = DateTime.Now;StringBuilder sb = new StringBuilder(;for (int i=0; i < intLimit; i+strSub = i.ToString(;sb.Append(“ “;sb.Append(strSub;endTime = DateTim

12、e.Now;elapsedTime = endTime - startTime;lblBuild.Text = elapsedTime.ToString(; / lblBuildString.Text = sb.ToString(; < /script>< html>< body>< form runat=”server ”>< h1>String Concatenation Benchmark< /h1> Concatenation:< asp:Label id=”lblConcat ” runat=”server

13、 ”/> < br/>< asp:Label id=”lblConcatString ”runat=”server ”/>< br/> < br/>StringBuilder:< asp:Label id=”lblBuild ” runat=”server ”/>< br/>< asp:Label id=”lblBuildString ”runat=”server ”/>< /form>< /body>< /html> 二種方式的差別是相當(dāng)大的:使用StringBuil

14、der 類的Append 方法的速度比使用字符串連接的速度快近200倍。5、只在必要時使用服務(wù)器端控件ASP.NET 中新引入了一種在服務(wù)器端運行的被稱作Web Server Controls 的控件,在代碼中,它們經(jīng)常通過下面的語法被說明:< asp:TextBox id=”txtLastName ” size=”40” runat=”server ” /> 它們有時也被稱作ASP 控件。服務(wù)器端控件是由runat 屬性指示的,它的值總是“server ”。通過添加runat 屬性,一般的HTML 控件可以被很方便地轉(zhuǎn)換到服務(wù)器端運行,下面是一個簡單的例子:< input

15、type=”text ” id=”txtLastName ” size=”40” runat=”server ” /> 可以通過id 屬性中指定的名字,我們可以引用程序中的控件,可以通過編程的方式設(shè)置屬性和獲得值,因此,服務(wù)器端處理方式有較大的靈活性。這種靈活性是有一定代價的。每種服務(wù)器端控件都會消耗服務(wù)器上的資源。另外,除非控件、網(wǎng)頁或應(yīng)用程序明確地禁止view state ,控件的狀態(tài)是包含在view state 的隱藏域中,并在每次回送中都會被傳遞,這會引起嚴重的性能下降。在這方面的一個很好的例子是,網(wǎng)頁上控件表格的應(yīng)用,如果不需要在代碼中引用表格中的元素,則使用無需進行服務(wù)器端處

16、理的HTML 表格。我們?nèi)匀豢梢栽贖TML 表格單元中放置服務(wù)器控件,并在代碼中引用服務(wù)器控件。如果需要引用任意的表格元素,例如指定的單元,則整個表格必須是服務(wù)器控件。6. HyperLink控件、LinkButton 控件的差別對于Web 訪問者而言,HyperLink 、LinkButton 控件是一樣的,但它們在功能方面仍然有較大的差異。當(dāng)用戶點擊控件時,HyperLink 控件會立即將用戶“導(dǎo)航”到目標(biāo)URL ,表件不會回送到服務(wù)器上。LinkButton 控件則首先將表件發(fā)回到服務(wù)器,然后將用戶導(dǎo)航到目標(biāo)URL 。如果在“到達”目標(biāo)URL 之前需要進行服務(wù)器端處理,則使用LinkBu

17、tton 控件; 如果無需進行服務(wù)器端處理,則可以使用HyperLink 控件。7、注釋代碼這一技巧并不是針對ASP.NET 的,但它是一個良好的編程習(xí)慣。 注釋不僅僅應(yīng)當(dāng)說明代碼會執(zhí)行什么操作,還應(yīng)當(dāng)注明原因。例如,不要僅僅在注釋中說明是在遍歷數(shù)組,而是要說明遍歷數(shù)組是根據(jù)某一算法計算一個值,除非算法是相當(dāng)簡單的,否則還應(yīng)當(dāng)對算法進行簡要的說明。.NET 工程中的不同的編程語言都有各自不同的注釋符號,下面是一個簡要的說明:HTML < !- 注釋 ->JavaScript / 注釋VBScript 注釋VB.NET 注釋C# / 注釋/* 多行內(nèi)容的注釋*/SQL - 注釋在服務(wù)

18、器控件的開始和結(jié)束標(biāo)記中沒有注釋符號,但服務(wù)器能夠忽略掉所有它不能識別的屬性,因此我們能夠通過使用沒有定義的屬性來插入注釋。下面是一個例子:< asp:TextBox id=”txtLastName ” size=”40” comment=”這是我的注釋”runat=”server ” />在Visual Studio .NET中對源代碼進行注釋非常簡單。高亮度顯示需要注釋的行,然后按Ctrl+K+C組合鍵添加注釋。要刪除注釋,只需高亮度顯示被注釋的代碼,并按下Ctrl+K+U組合鍵。在C#工程中,我們還可以通過在每行的開始處使用/輸入XML 注釋小節(jié)。在注釋小節(jié)中,我們可以使用下

19、面的XML 標(biāo)記組織注釋:< summary>< /summary>< remarks>< /remarks >< param>< /param>< returns>< /returns>< newpara>< /newpara>要在Visual Studio .NET 中查看這些XML 注釋的格式化的報告,我們可以首先選擇“工具”菜單項,然后選擇“建立注釋W(xué)eb 網(wǎng)頁”菜單項。8、使用trace 方法和trace 屬性記錄Page 目錄中網(wǎng)頁的執(zhí)行情況調(diào)試程序的一種古老的技

20、術(shù)是在程序中的關(guān)健點插入輸出語句,通常情況下,輸出信息中會包含重要變量的值,相關(guān)信息可以輸出到屏幕、日志文件或者數(shù)據(jù)庫。在ASP.NET 中,通過使用Page 命令中的trace 屬性,這種調(diào)試技術(shù)的使用更簡單了。Page 命令是ASPX 文件開始處的一行代碼,它提供編譯器的指示。Page 命令中包含一個或多個屬性,向編譯器提供使用的編程語言、代碼支持文件的位置或要繼承的類的名字等信息。 Page 命令中的屬性之一是trace ,其值可能是true 或false ,下面是一個典型的Page 命令,其中的trace 屬性的值是true :< % Page language=”c#” tra

21、ce=”true ” %>如果trace 屬性的值設(shè)置為true ,由ASPX 文件生成的Web 頁就會顯示出來,除了網(wǎng)頁本身外,關(guān)于該頁的大量其他信息也會顯示出來。這些信息以下面小節(jié)的形式顯示在一張表格中: ·Request 細節(jié) 提供Session ID、請求時間和請求的狀態(tài)碼。·Trace Information 包含跟蹤日志、網(wǎng)頁生命周期中按時間先后順序各個步驟的列表。另外,也可以向其中添加定制信息。·控件樹 以一種分層次的方式列出網(wǎng)頁上的所有控件,包括每個控件以字節(jié)計算的大小。 ·Cookies 集合 列出該網(wǎng)頁創(chuàng)建的所有Cookie 。·頭部集合 HTTP頭部以及它們的值。·Server 變量 與該網(wǎng)頁相關(guān)的Server 環(huán)境變量。包含在Trace Information 小節(jié)中的跟蹤日志是最有用的,在這里我們可以插入自己的跟蹤命令。trace 類中有2個方法能夠在跟蹤日志中插入命令:Trace.Write 和Trace.Warn ,除了Trace.Warn 命令用紅色字體顯示、Trace.Write 命令用黑色字體顯示外,它們是相同的。下面是跟蹤日志的一個屏幕快照,其中包含有幾個Trace.Warn 命令。跟蹤日志中最方便的功能是我們可以在開發(fā)和測試過程中在整個

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論