字符串在.Net框架中是不可變的,這意味著改變字符串的操作符和方法會返回字符串的改變後的拷貝,這意味著性能還有提高的空間。當進行大量的字符串操作時,使用StringBuilder類就是一種比較好的選擇了。
下面的C#代碼測試用二種方式從10000個子字符串中生成字符串所需要的時間。第一次使用了一個簡單的字符串串聯操作;第二次使用了StringBuilder類。要想查看結果字符串,可以去掉下面的代碼中注解行的注解符號:
<%@ 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 = "";
// 首先執行字符串連接操作
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類進行同樣的操作
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>
二種方式的差別是相當大的:使用StringBuilder類的Append方法的速度比使用字符串連接的速度快近200倍