国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > .NET > 正文

ASP.NET編程中的十大技巧(建議進(jìn)精華)

2024-07-10 13:08:16
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
在本篇文件中,我們將討論編程人員在使用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í)行的操作
}

// 網(wǎng)頁(yè)每次加載時(shí)執(zhí)行的操作
}
我們希望盡量不引起回送(每次回送都會(huì)要求服務(wù)器進(jìn)行一系列的操作),即使引起回送后。也希望能夠執(zhí)行盡量少的操作。大規(guī)模、浪費(fèi)時(shí)間的操作(例如數(shù)據(jù)庫(kù)查找)尤其應(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倍。比較的結(jié)果如下所示:
(圖:picture01)


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

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

<asp:textbox id="txtlastname" size="40" runat="server" />
它們有時(shí)也被稱作asp控件。服務(wù)器端控件是由runat屬性指示的,它的值總是“server”。
通過(guò)添加runat屬性,一般的html控件可以被很方便地轉(zhuǎn)換到服務(wù)器端運(yùn)行,下面是一個(gè)簡(jiǎn)單的例子:

<input type="text" id="txtlastname" size="40" runat="server" />
可以通過(guò)id屬性中指定的名字,我們可以引用程序中的控件,可以通過(guò)編程的方式設(shè)置屬性和獲得值,因此,服務(wù)器端處理方式有較大的靈活性。

這種靈活性是有一定代價(jià)的。每種服務(wù)器端控件都會(huì)消耗服務(wù)器上的資源。另外,除非控件、網(wǎng)頁(yè)或應(yīng)用程序明確地禁止view state,控件的狀態(tài)是包含在view state的隱藏域中,并在每次回送中都會(huì)被傳遞,這會(huì)引起嚴(yán)重的性能下降。
在這方面的一個(gè)很好的例子是,網(wǎng)頁(yè)上控件表格的應(yīng)用,如果不需要在代碼中引用表格中的元素,則使用無(wú)需進(jìn)行服務(wù)器端處理的html表格。我們?nèi)匀豢梢栽趆tml表格單元中放置服務(wù)器控件,并在代碼中引用服務(wù)器控件。如果需要引用任意的表格元素,例如指定的單元,則整個(gè)表格必須是服務(wù)器控件。
6. hyperlink控件、linkbutton控件的差別
對(duì)于web訪問(wèn)者而言,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控件;如果無(wú)需進(jìn)行服務(wù)器端處理,則可以使用hyperlink控件。
7、注釋代碼
這一技巧并不是針對(duì)asp.net的,但它是一個(gè)良好的編程習(xí)慣。
注釋不僅僅應(yīng)當(dāng)說(shuō)明代碼會(huì)執(zhí)行什么操作,還應(yīng)當(dāng)注明原因。例如,不要僅僅在注釋中說(shuō)明是在遍歷數(shù)組,而是要說(shuō)明遍歷數(shù)組是根據(jù)某一算法計(jì)算一個(gè)值,除非算法是相當(dāng)簡(jiǎn)單的,否則還應(yīng)當(dāng)對(duì)算法進(jìn)行簡(jiǎn)要的說(shuō)明。
.net工程中的不同的編程語(yǔ)言都有各自不同的注釋符號(hào),下面是一個(gè)簡(jiǎn)要的說(shuō)明:
html <!-- 注釋 -->  
javascript // 注釋
vbscript ' 注釋
vb.net ' 注釋
c# // 注釋
/* 多行內(nèi)容
的注釋
*/  
sql -- 注釋

在服務(wù)器控件的開(kāi)始和結(jié)束標(biāo)記中沒(méi)有注釋符號(hào),但服務(wù)器能夠忽略掉所有它不能識(shí)別的屬性,因此我們能夠通過(guò)使用沒(méi)有定義的屬性來(lái)插入注釋。下面是一個(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#工程中,我們還可以通過(guò)在每行的開(kāi)始處使用///輸入xml注釋小節(jié)。在注釋小節(jié)中,我們可以使用下面的xml標(biāo)記組織注釋:
<summary></summary>  
<remarks></remarks >  
<param></param>  
<returns></returns>  
<newpara></newpara>
要在visual studio .net中查看這些xml注釋的格式化的報(bào)告,我們可以首先選擇“工具”菜單項(xiàng),然后選擇“建立注釋web網(wǎng)頁(yè)”菜單項(xiàng)。
8、使用trace方法和trace屬性記錄page目錄中網(wǎng)頁(yè)的執(zhí)行情況
調(diào)試程序的一種古老的技術(shù)是在程序中的關(guān)健點(diǎn)插入輸出語(yǔ)句,通常情況下,輸出信息中會(huì)包含重要變量的值,相關(guān)信息可以輸出到屏幕、日志文件或者數(shù)據(jù)庫(kù)。
在asp.net中,通過(guò)使用page命令中的trace屬性,這種調(diào)試技術(shù)的使用更簡(jiǎn)單了。page命令是aspx文件開(kāi)始處的一行代碼,它提供編譯器的指示。page命令中包含一個(gè)或多個(gè)屬性,向編譯器提供使用的編程語(yǔ)言、代碼支持文件的位置或要繼承的類的名字等信息。
page命令中的屬性之一是trace,其值可能是true或false,下面是一個(gè)典型的page命令,其中的trace屬性的值是true:

<%@ page language="c#" trace="true" %>

如果trace屬性的值設(shè)置為true,由aspx文件生成的web頁(yè)就會(huì)顯示出來(lái),除了網(wǎng)頁(yè)本身外,關(guān)于該頁(yè)的大量其他信息也會(huì)顯示出來(lái)。這些信息以下面小節(jié)的形式顯示在一張表格中:
·request細(xì)節(jié) 提供session id、請(qǐng)求時(shí)間和請(qǐng)求的狀態(tài)碼。
·trace information 包含跟蹤日志、網(wǎng)頁(yè)生命周期中按時(shí)間先后順序各個(gè)步驟的列表。另外,也可以向其中添加定制信息。
·控件樹(shù) 以一種分層次的方式列出網(wǎng)頁(yè)上的所有控件,包括每個(gè)控件以字節(jié)計(jì)算的大小。
·cookies集合 列出該網(wǎng)頁(yè)創(chuàng)建的所有cookie。
·頭部集合 http頭部以及它們的值。
·server變量 與該網(wǎng)頁(yè)相關(guān)的server環(huán)境變量。  

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

跟蹤日志中最方便的功能是我們可以在開(kāi)發(fā)和測(cè)試過(guò)程中在整個(gè)代碼中插入trace.write和trace.warn語(yǔ)句,而在最終交付應(yīng)用程序時(shí),可以通過(guò)改變page命令中trace屬性的值,禁止這些命令起作用,而無(wú)需在部署應(yīng)用軟件前刪除這些輸出語(yǔ)句。
9、使用存儲(chǔ)過(guò)程
微軟公司的sql server和其他現(xiàn)代關(guān)系數(shù)據(jù)庫(kù)都使用sql命令定義和處理查詢。一個(gè)sql語(yǔ)句或一系列sql語(yǔ)句提交給sql server,sql server會(huì)對(duì)命令進(jìn)行解析,然后創(chuàng)建一個(gè)查詢計(jì)劃并對(duì)它進(jìn)行優(yōu)化,然后執(zhí)行該查詢計(jì)劃,這都需要大量的時(shí)間。
存儲(chǔ)過(guò)程是一系列被查詢處理器預(yù)解析和優(yōu)化的sql命令,這些命令會(huì)被存儲(chǔ)起來(lái),可以得到快速地執(zhí)行。存儲(chǔ)過(guò)程也被稱作sprocs,它可以接收輸入?yún)?shù),使一個(gè)單一的存儲(chǔ)過(guò)程能夠處理較大范圍的特定的查詢。
因?yàn)閟procs是預(yù)先被解析的,對(duì)于復(fù)雜的查詢更顯得重要,其查詢計(jì)劃是預(yù)先優(yōu)化的,因此調(diào)用查詢過(guò)程比執(zhí)行相同功能的sql語(yǔ)句速度要快得多。
10、使用.net命令行
.net命令行工具在命令提示符窗口中運(yùn)行。為了使命令能夠執(zhí)行,它必須駐留在命令提示符的當(dāng)前目錄中,或通過(guò)設(shè)置path環(huán)境變量。
.net sdk在“啟動(dòng)”菜單上安裝一個(gè)菜單項(xiàng),該菜單項(xiàng)能夠打開(kāi)一個(gè)正確設(shè)置了path環(huán)境變量的命令提示符窗口。我們可以通過(guò)依次點(diǎn)擊“開(kāi)始”->“程序”->“microsoft visual studio .net”->“visual studio .net工具”->“visual studio .net命令提示符”,啟動(dòng)命令提示符窗口。
通過(guò)在將該菜單項(xiàng)從菜單上拖到桌面上時(shí),同時(shí)按ctrl+c鍵,就可以將該菜單項(xiàng)的快捷方式拷貝到桌面上,使用起來(lái)會(huì)非

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 怀化市| 陆良县| 巴林左旗| 金山区| 永胜县| 那曲县| 沙雅县| 正定县| 淳化县| 徐汇区| 东辽县| 陵水| 大竹县| 宽甸| 方山县| 长宁区| 贡觉县| 年辖:市辖区| 卢龙县| 磐石市| 安西县| 高要市| 宜黄县| 三河市| 九龙坡区| 延寿县| 沂南县| 宁安市| 阿拉尔市| 布拖县| 周至县| 嘉鱼县| 隆尧县| 阳高县| 龙井市| 丰城市| 霍林郭勒市| 怀安县| 类乌齐县| 资源县| 木里|