久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

ASP.NET編程中的十大技巧

 kommy 2007-09-24

ASP.NET應(yīng)用程序設(shè)計(jì)的10大技巧

ASP.NET應(yīng)用程序設(shè)計(jì)的10大技巧
[日期:2006-05-28] 來源:  作者: [字體:大 中 小] 

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

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

  .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提供自動(dòng)的代碼完成、在輸入方法或函數(shù)時(shí)提供動(dòng)態(tài)幫助,、語法錯(cuò)誤的實(shí)時(shí)提示,,以及其他能夠提高生產(chǎn)效率的功能。

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

  Visual Studio .Net的一個(gè)功能是,無論是類,、控件或表單中的對(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頁類的名字仍然將是WebForm1,。如果在該Web表單上生成一個(gè)按鈕,其缺省的名字將是Button1,。事實(shí)上,,所有控件的名字都是由控件的類型和數(shù)字組成的。

  我們能夠,,也應(yīng)該將應(yīng)用程序中所有的表單和控件的名字都修改成有意義的名字,。對(duì)于較小的演示性程序而言,缺省的名字還能夠勝任,,但如果應(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ì)。另外,,它還會(huì)帶來性能的提高,。

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

  如果代碼是包含在<Script>標(biāo)記中或ASPX文件代碼中,它仍然會(huì)被編譯成一個(gè)Web頁類,。在這種情況下,,每當(dāng)該網(wǎng)頁在應(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)頁上的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)頁的初始化代碼放在這里是最合適不過的了。我們經(jīng)常會(huì)希望在每次加載網(wǎng)頁時(shí)執(zhí)行一些代碼,,而希望只有在網(wǎng)頁第一次加載時(shí)執(zhí)行另一些代碼,,甚至希望一些代碼在除首次加載外的每次加載時(shí)執(zhí)行。

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


protected void Page_Load(Object sender, EventArgs e)
{
// 網(wǎng)頁每次加載時(shí),,執(zhí)行的一些操作
if (!IsPostBack)
{
// 網(wǎng)頁第一次加載時(shí)執(zhí)行的操作
}
else
{
// 回送時(shí)執(zhí)行的操作
}

// 網(wǎng)頁每次加載時(shí)執(zhí)行的操作
}

 

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

  4、使用StringBuilder類

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

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

<%@ Page Language="C#" %>

<Script runat="server">
void 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;
elapsedTime = endTime - startTime;
lblConcat.Text = elapsedTime.ToString();
// lblConcatString.Text = strWhole;

// 使用stringBuilder類進(jìn)行同樣的操作
startTime = DateTime.Now;
StringBuilder sb = new StringBuilder();
for (int i=0; i < intLimit; i++)
{
strSub = i.ToString();
sb.Append(" ");
sb.Append(strSub);
}
endTime = DateTime.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"/>

<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)大的:使用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è)簡(jiǎn)單的例子:

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


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

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

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

  6. HyPERLink控件,、LinkButton控件的差別

  對(duì)于Web訪問者而言,HyPERLink,、LinkButton控件是一樣的,,但它們?cè)诠δ芊矫嫒匀挥休^大的差異。
當(dāng)用戶點(diǎn)擊控件時(shí),,HyPERLink控件會(huì)立即將用戶“導(dǎo)航”到目標(biāo)URL,,表件不會(huì)回送到服務(wù)器上。 LinkButton控件則首先將表件發(fā)回到服務(wù)器,,然后將用戶導(dǎo)航到目標(biāo)URL,。如果在“到達(dá)”目標(biāo)URL之前需要進(jìn)行服務(wù)器端處理,則使用LinkButton控件,;如果無需進(jìn)行服務(wù)器端處理,,則可以使用HyPERLink控件。

  7,、注釋代碼

  這一技巧并不是針對(duì)ASP.Net的,,但它是一個(gè)良好的編程習(xí)慣。

  注釋不僅僅應(yīng)當(dāng)說明代碼會(huì)執(zhí)行什么操作,還應(yīng)當(dāng)注明原因,。例如,,不要僅僅在注釋中說明是在遍歷數(shù)組,而是要說明遍歷數(shù)組是根據(jù)某一算法計(jì)算一個(gè)值,,除非算法是相當(dāng)簡(jiǎn)單的,,否則還應(yīng)當(dāng)對(duì)算法進(jìn)行簡(jiǎn)要的說明。

  .Net工程中的不同的編程語言都有各自不同的注釋符號(hào),,下面是一個(gè)簡(jiǎn)要的說明:


HTML <!-- 注釋 -->
JAVAScript // 注釋
VBScript ‘ 注釋
VB.Net ‘ 注釋
C# // 注釋
/* 多行內(nèi)容
的注釋
*/
SQL -- 注釋


  在服務(wù)器控件的開始和結(jié)束標(biāo)記中沒有注釋符號(hào),,但服務(wù)器能夠忽略掉所有它不能識(shí)別的屬性,因此我們能夠通過使用沒有定義的屬性來插入注釋,。下面是一個(gè)例子:

<ASP:TextBox id="txtLastName" size="40" comment="這是我的注釋" runat="server" />


  在Visual Studio .Net中對(duì)源代碼進(jìn)行注釋非常簡(jiǎn)單,。高亮度顯示需要注釋的行,然后按Ctrl+K+C組合鍵添加注釋,。要?jiǎng)h除注釋,,只需高亮度顯示被注釋的代碼,并按下Ctrl+K+U組合鍵,。

  在C#工程中,,我們還可以通過在每行的開始處使用///輸入XML注釋小節(jié)。在注釋小節(jié)中,,我們可以使用下面的XML標(biāo)記組織注釋:


<summary></summary>
<remarks></remarks >
<param></param>
<returns></returns>
<newpara></newpara>


  要在Visual Studio .Net中查看這些XML注釋的格式化的報(bào)告,,我們可以首先選擇“工具”菜單項(xiàng),然后選擇“建立注釋W(xué)eb網(wǎng)頁”菜單項(xiàng),。
  8,、使用trace方法和trace屬性記錄Page目錄中網(wǎng)頁的執(zhí)行情況

  調(diào)試程序的一種古老的技術(shù)是在程序中的關(guān)健點(diǎn)插入輸出語句,通常情況下,,輸出信息中會(huì)包含重要變量的值,,相關(guān)信息可以輸出到屏幕、日志文件或者數(shù)據(jù)庫,。

  在ASP.Net中,,通過使用Page命令中的trace屬性,這種調(diào)試技術(shù)的使用更簡(jiǎn)單了,。Page命令是ASPX文件開始處的一行代碼,,它提供編譯器的指示。Page命令中包含一個(gè)或多個(gè)屬性,,向編譯器提供使用的編程語言,、代碼支持文件的位置或要繼承的類的名字等信息。

  Page命令中的屬性之一是trace,,其值可能是true或false,,下面是一個(gè)典型的Page命令,,其中的trace屬性的值是true:


<%@ Page language="C#" trace="true" %>


  如果trace屬性的值設(shè)置為true,由ASPX文件生成的Web頁就會(huì)顯示出來,,除了網(wǎng)頁本身外,,關(guān)于該頁的大量其他信息也會(huì)顯示出來。這些信息以下面小節(jié)的形式顯示在一張表格中:

  ·Request細(xì)節(jié) 提供Session ID,、請(qǐng)求時(shí)間和請(qǐng)求的狀態(tài)碼,。
  ·Trace Information 包含跟蹤日志,、網(wǎng)頁生命周期中按時(shí)間先后順序各個(gè)步驟的列表,。另外,也可以向其中添加定制信息,。
  ·控件樹 以一種分層次的方式列出網(wǎng)頁上的所有控件,,包括每個(gè)控件以字節(jié)計(jì)算的大小。
  ·CookIEs集合 列出該網(wǎng)頁創(chuàng)建的所有CookIE,。
  ·頭部集合 HTTP頭部以及它們的值,。
  ·Server變量 與該網(wǎng)頁相關(guān)的Server環(huán)境變量。

  包含在Trace Information小節(jié)中的跟蹤日志是最有用的,,在這里我們可以插入自己的跟蹤命令,。trace類中有2個(gè)方法能夠在跟蹤日志中插入命令:Trace.Write和Trace.Warn,除了Trace.Warn命令用紅色字體顯示,、Trace.Write命令用黑色字體顯示外,,它們是相同的。下面是跟蹤日志的一個(gè)屏幕快照,,其中包含有幾個(gè)Trace.Warn命令,。

  跟蹤日志中最方便的功能是我們可以在開發(fā)和測(cè)試過程中在整個(gè)代碼中插入Trace.Write和Trace.Warn語句,而在最終交付應(yīng)用程序時(shí),,可以通過改變Page命令中trace屬性的值,,禁止這些命令起作用,而無需在部署應(yīng)用軟件前刪除這些輸出語句,。

  9,、使用存儲(chǔ)過程

  微軟公司的SQL Server和其他現(xiàn)代關(guān)系數(shù)據(jù)庫都使用SQL命令定義和處理查詢。一個(gè)SQL語句或一系列SQL語句提交給SQL Server,,SQL Server會(huì)對(duì)命令進(jìn)行解析,,然后創(chuàng)建一個(gè)查詢計(jì)劃并對(duì)它進(jìn)行優(yōu)化,然后執(zhí)行該查詢計(jì)劃,,這都需要大量的時(shí)間,。

  存儲(chǔ)過程是一系列被查詢處理器預(yù)解析和優(yōu)化的SQL命令,這些命令會(huì)被存儲(chǔ)起來,,可以得到快速地執(zhí)行,。存儲(chǔ)過程也被稱作sprocs,它可以接收輸入?yún)?shù),使一個(gè)單一的存儲(chǔ)過程能夠處理較大范圍的特定的查詢,。

  因?yàn)閟procs是預(yù)先被解析的,,對(duì)于復(fù)雜的查詢更顯得重要,其查詢計(jì)劃是預(yù)先優(yōu)化的,,因此調(diào)用查詢過程比執(zhí)行相同功能的SQL語句速度要快得多,。

  10、使用.Net命令行

  .Net命令行工具在命令提示符窗口中運(yùn)行,。為了使命令能夠執(zhí)行,,它必須駐留在命令提示符的當(dāng)前目錄中,或通過設(shè)置PATH環(huán)境變量,。

  .Net SDK在“啟動(dòng)”菜單上安裝一個(gè)菜單項(xiàng),,該菜單項(xiàng)能夠打開一個(gè)正確設(shè)置了PATH環(huán)境變量的命令提示符窗口。我們可以通過依次點(diǎn)擊“開始”->“程序”->“Microsoft Visual Studio .Net”->“Visual Studio .Net工具”->“Visual Studio .Net命令提示符”,,啟動(dòng)命令提示符窗口,。

  通過在將該菜單項(xiàng)從菜單上拖到桌面上時(shí),同時(shí)按Ctrl+C鍵,,就可以將該菜單項(xiàng)的快捷方式拷貝到桌面上,,使用起來會(huì)非常方便。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多