cdc

导航

使用StringBuilder类

Posted on 2006-04-21 11:42  Chris Chen  阅读(188)  评论(0)    收藏  举报
字符串在.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倍。