ASP.NET程序設(shè)計(jì)的10大技巧(2)_.Net教程
推薦:.net 框架程序的設(shè)計(jì).net 平臺(tái)構(gòu)成 1 底層操操作系統(tǒng) windows 由于Web服務(wù)和使用Web服務(wù)的應(yīng)用程序仍然運(yùn)行在計(jì)算機(jī)上,而且既然是計(jì)算機(jī)都 要有外設(shè),所以我們?nèi)匀恍枰粋(gè)操作系統(tǒng).. Windows添加了Xml支持.. Windows XP和Windows.net (現(xiàn)在改名為windows Server 2003 ) 所有版本
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)常通過(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),然后選擇“建立注釋W(xué)eb網(wǎng)頁(yè)”菜單項(xiàng)。
分享:解析ASP.NET MVC項(xiàng)目中視圖的單元測(cè)試關(guān)于視圖的單元測(cè)試 說(shuō)到ASP.NET MVC,我們似乎始終都在關(guān)注對(duì)于Controller的測(cè)試雖然Stephen Walther也寫(xiě)過(guò)如何脫離Web Server對(duì)View進(jìn)行單元測(cè)試,但是他的方法可看而不可用。復(fù)雜的構(gòu)造和預(yù)備,以及對(duì)生成的HTML字符串作判斷這真是在對(duì)視圖做單元測(cè)試嗎?
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發(fā)送Email實(shí)例(可帶附件)
- js實(shí)現(xiàn)廣告漂浮效果的小例子
- asp.net Repeater 數(shù)據(jù)綁定的具體實(shí)現(xiàn)
- Asp.Net 無(wú)刷新文件上傳并顯示進(jìn)度條的實(shí)現(xiàn)方法及思路
- Asp.net獲取客戶端IP常見(jiàn)代碼存在的偽造IP問(wèn)題探討
- VS2010 水晶報(bào)表的使用方法
- ASP.NET中操作SQL數(shù)據(jù)庫(kù)(連接字符串的配置及獲取)
- asp.net頁(yè)面?zhèn)髦禍y(cè)試實(shí)例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲(chǔ)過(guò)程實(shí)現(xiàn)分頁(yè)示例代碼
.Net教程Rss訂閱編程教程搜索
.Net教程推薦
- 微軟新版開(kāi)發(fā)工具VS 2008 beta2功能定案
- 試析ASP.NET的IIS映射
- 用SQL語(yǔ)句修復(fù)SQL Server數(shù)據(jù)庫(kù)
- asp.net中文件下載功能的實(shí)例代碼
- Windows2003中配置運(yùn)行ASP.net程序
- 淺談ADO.NET Entity Framework存取數(shù)據(jù)庫(kù)中圖片
- 解讀.net垃圾回收和CLR 4.0對(duì)垃圾回收所做的改進(jìn)之二
- 解析ASP.NET用戶控件說(shuō)明和添加事件
- Asp.Net的繼承和多態(tài)性實(shí)例講解
- 從XML文件中讀取數(shù)據(jù)綁定到DropDownList
- 相關(guān)鏈接:
- 教程說(shuō)明:
.Net教程-ASP.NET程序設(shè)計(jì)的10大技巧(2)
。