在本篇文件中,我們將討論編程人員在使用asp.net開(kāi)發(fā)應(yīng)用程序時(shí)需要注意的10個(gè)技巧,這些技巧涉及從缺省的控件、表單名的改變到stringbuilder類的使用,有助于編程人員能夠盡快地適應(yīng).net環(huán)境。 1、在使用visual studio .net時(shí),除直接或非引用的對(duì)象外,不要使用缺省的名字。 .net帶來(lái)的好處之一是所有的源代碼和配置文件都是純文本文件,能夠使用notepad或wordpad等任意的文本編輯器進(jìn)行編輯。如果不愿意,我們并非一定要使用visual studio .net作為集成開(kāi)發(fā)環(huán)境。但使用了visual studio .net,我們可以在windows文件管理器中看到文件,或在visual studio .net之外從文本編輯器中瀏覽文件的內(nèi)容。 使用visual studio .net作為集成開(kāi)發(fā)環(huán)境有許多好處,其中最顯著的好處是它極大地提高了生產(chǎn)效率。使用visual studio. net,我們能夠在付出較小代價(jià)的情況下更快地開(kāi)發(fā)軟件。作為集成開(kāi)發(fā)環(huán)境一部分的intellisense提供自動(dòng)的代碼完成、在輸入方法或函數(shù)時(shí)提供動(dòng)態(tài)幫助、語(yǔ)法錯(cuò)誤的實(shí)時(shí)提示,以及其他能夠提高生產(chǎn)效率的功能。 象其他復(fù)雜的工具那樣,在學(xué)會(huì)如何充分發(fā)揮它的作用和掌握其“習(xí)性”前,visual studio .net也會(huì)使我們產(chǎn)生一種挫折感。有時(shí),它象一個(gè)難以了解的黑盒子,會(huì)生成大量的文件和許多無(wú)用的代碼。 visual studio .net的一個(gè)功能是,無(wú)論是類、控件或表單中的對(duì)象,它都能夠?yàn)樾聦?duì)象提供缺省名字。例如,如果我們創(chuàng)建了一個(gè)新的asp.net web application,其缺省的名字將是webapplication1。我們可以在“新工程”對(duì)話框中方便地改變?cè)搼?yīng)用的名字,但同時(shí)改變的只是該應(yīng)用程序的名字空間的名字及其所在的虛擬目錄,源代碼文件的缺省名字仍然是webform1.aspx和webform1.aspx.cs(c#工程)或webform1.aspx.vb(vb.net工程)。
我們可以在方案瀏覽器中改變aspx和代碼使用的文件名字,但web頁(yè)類的名字仍然將是webform1。如果在該web表單上生成一個(gè)按鈕,其缺省的名字將是button1。事實(shí)上,所有控件的名字都是由控件的類型和數(shù)字組成的。 我們能夠,也應(yīng)該將應(yīng)用程序中所有的表單和控件的名字都修改成有意義的名字。對(duì)于較小的演示性程序而言,缺省的名字還能夠勝任,但如果應(yīng)用程序由多個(gè)表單,每個(gè)表單上有許多按鈕和標(biāo)簽時(shí),象frmstartup、frmdataentry和frmreports這樣的表單名就比f(wàn)orm1、form2和form3這樣的名字更易于理解和維護(hù)。 如果表單上控件要在代碼的其他地方引用,使它有一個(gè)有意義的名字就更重要了。btnok、btncancel和btnprint這樣的名字使看代碼的人更容易理解,因而,也比名字為button1、button2、button3這樣的控件更容易維護(hù)。 修改一個(gè)工程中所有文件中出現(xiàn)的一個(gè)名字的一個(gè)好方法是,在visual studio .net菜單中依次選擇“編輯”->“發(fā)現(xiàn)和替換”->“替換”命令。 在看二周前編寫(xiě)的代碼時(shí),我們經(jīng)常就象第一次見(jiàn)到這些代碼一樣,因此使它們有一個(gè)有助于我們理解其含義的名字是十分有必要的。 2、即使不使用visual studio .net進(jìn)行編程,使用代碼支持文件也有利于提高應(yīng)用程序的性能 在web應(yīng)用程序、web服務(wù)或web控件等所有的asp.net web工程中,visual studio .net都使用代碼支持文件。代碼支持文件使工程具有更好的組織、模塊性,更適合多人組成的開(kāi)發(fā)團(tuán)隊(duì)。另外,它還會(huì)帶來(lái)性能的提高。 代碼支持文件的內(nèi)容被編譯成一個(gè)組合文件中的類,一般是一個(gè)dll文件,有時(shí)也可以是exe文件。該文件駐留在應(yīng)用程序的組合體高速緩沖區(qū)中,在應(yīng)用程序啟動(dòng)時(shí),可以立即得到它。 如果代碼是包含在<script>標(biāo)記中或aspx文件代碼中,它仍然會(huì)被編譯成一個(gè)web頁(yè)類。在這種情況下,每當(dāng)該網(wǎng)頁(yè)在應(yīng)用程序?qū)υ捴械谝淮渭虞d時(shí),都需要重新進(jìn)行編譯,被編譯的類就會(huì)駐留在內(nèi)存中。每當(dāng)計(jì)算機(jī)啟動(dòng)、iis停止、重新啟動(dòng)或者源代碼、配置文件改變時(shí),該文件必須重新編譯。盡管不大,但這樣引起的性能損耗也是相當(dāng)可觀的。 3、盡量減少表單回送 每當(dāng)點(diǎn)擊web網(wǎng)頁(yè)上的button、linkbutton或imagebutton控件時(shí),表單就會(huì)被發(fā)送到服務(wù)器上。如果控件的autopostback屬性被設(shè)置為true,如果checkbox、checkboxlist等控件的狀態(tài)被改變后,也會(huì)使表單會(huì)發(fā)送回服務(wù)器。 每次當(dāng)表單被發(fā)送回服務(wù)器,就會(huì)被重新加載,啟動(dòng)page_load事件,執(zhí)行page_load事件處理程序中的所有代碼。把網(wǎng)頁(yè)的初始化代碼放在這里是最合適不過(guò)的了。我們經(jīng)常會(huì)希望在每次加載網(wǎng)頁(yè)時(shí)執(zhí)行一些代碼,而希望只有在網(wǎng)頁(yè)第一次加載時(shí)執(zhí)行另一些代碼,甚至希望一些代碼在除首次加載外的每次加載時(shí)執(zhí)行。 可以利用ispostback特性來(lái)完成這一功能。在網(wǎng)頁(yè)第一次加載時(shí),該屬性的值是false。如果網(wǎng)頁(yè)因回送而被重新加載,ispostback屬性的值就會(huì)被設(shè)置為true。通過(guò)測(cè)試,可以在任意時(shí)候執(zhí)行指定的代碼。下面是相關(guān)的c#代碼: protected void page_load(object sender, eventargs e) { // 網(wǎng)頁(yè)每次加載時(shí),執(zhí)行的一些操作 if (!ispostback) { // 網(wǎng)頁(yè)第一次加載時(shí)執(zhí)行的操作 } else { // 回送時(shí)執(zhí)行的操作 }