String和StringBuilder的区别?
1、String类是一种传统的修改字符串的方式,它确实可以完成把一个字符串添加到另一个字符串上的工作没错。但是在.NET框架下,这个操作实在是划不来。
因为系统先是把两个字符串写入内存,接着删除原来的String对象,然后创建一个String对象,并读取内存中的数据赋给该对象。这一来二去的,耗了不少时间。
2、而使用System.Text命名空间下面的StringBuilder类就不是这样了,它提供的Append方法,能够在已有对象的原地进行字符串的修改,简单而且直接。
当然,一般情况下你是觉察不出这二者效率的差异的,但如果你要对某个字符串进行大量的添加操作,那么用StringBuilder类所耗费的时间和String类简直不是一个数量级的
一下测试代码:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Text; namespace HandlerHelper.xiti { public partial class StringBuilderString : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { divshow.InnerHtml = getHtml(); } public string getHtml() { string html=""; DateTime startTime; DateTime endTime; StringBuilder strBuilder = new StringBuilder(); String str = String.Empty; html += "<ul>"; startTime = DateTime.Now; html += "<li>string:<li>"; html += "<li>开始时间:" + startTime.ToString() + "<li>"; for (int i = 0; i < 9999; i++) { str += i.ToString(); } endTime = DateTime.Now; html += "<li>结束时间:" + endTime.ToString() + "<li>"; html += "<li>StringBuilder:<li>"; html += "<li>耗时" + (endTime - startTime).ToString() + "</li>"; html += "<li>-------------------------------------------------------</li>"; startTime = DateTime.Now; html += "<li>开始时间:" + startTime.ToString() + "<li>"; for (int i = 0; i < 9999; i++) { strBuilder.Append(i.ToString()); } endTime = DateTime.Now; html += "<li>结束时间:" + endTime.ToString() + "<li>"; //html += "<li>使用StringBuilder字符串:" + strBuilder.ToString() + "<li>"; html += "<li>耗时" + (endTime - startTime).ToString() + "</li>"; html += "</ul>"; return html; } } }
页面显示结果:
- string:
- 开始时间:2013-7-23 15:52:57
- 结束时间:2013-7-23 15:52:58
- StringBuilder:
- 耗时00:00:00.8140466
- -------------------------------------------------------
- 开始时间:2013-7-23 15:52:58
- 结束时间:2013-7-23 15:52:58
- 耗时00:00:00.0020001