String与StringBuilder在性能上的比较
为什么在大量操作字符串时,应尽量地使用StringBuilder呢。为了证实StringBuilder在字符串处理方面的优势,我做了一个测试。
关键字:StringBuilder, String, 多线程.
环境:.Net 1.1 , WinXP Sp2
指标:内存占用率,CPU占用率, 时间
1.测试方法
在主线程中分别对StringBuilder.Append, String.Join 和 重载运算符进行1000*1000次循环,每次循环增加长度为26的字符串"abcdefghijklmnopqrstuvwxyz". 在子线程中建立一个记时器.
2.测试结果
StringBuilder.Append
内存占用率:最低
CPU占用率:最低
时间:最低
(需要注明的是:根据其Capacity属性初始值设立的不同,性能有明显不同)
String.Join
CPU占用率:极高
时间:极高
+Operator
CPU占用率:极高
时间:极高
3.思考(个人理解)
对于String类,因其immutable的性质,任何尝试更改其本身的行为都将延伸为创建新字符串和delete本身字符串两个操作,所以大大了增加开销。
对于StringBuilder类,其内部也只是封装的是一系列优化了的字符串操作方法,一个string类型,几个int类型,那么秘密应该就在于StringBuilder本身有着更好的字符串处理法则, 能够更高效地让GC回收自己在进行字符串串连过程中所产生的垃圾.
先到这,有了更加深入的剖析再继续。
4.其他相关连接
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=80802&SiteID=1
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=493185&SiteID=1
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=312581&SiteID=1
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndotnet/html/vbnstrcatn.asp
关键字:StringBuilder, String, 多线程.
环境:.Net 1.1 , WinXP Sp2
指标:内存占用率,CPU占用率, 时间
1.测试方法
在主线程中分别对StringBuilder.Append, String.Join 和 重载运算符进行1000*1000次循环,每次循环增加长度为26的字符串"abcdefghijklmnopqrstuvwxyz". 在子线程中建立一个记时器.
2.测试结果
StringBuilder.Append
内存占用率:最低
CPU占用率:最低
时间:最低
(需要注明的是:根据其Capacity属性初始值设立的不同,性能有明显不同)
String.Join
CPU占用率:极高
时间:极高
+Operator
CPU占用率:极高
时间:极高
3.思考(个人理解)
对于String类,因其immutable的性质,任何尝试更改其本身的行为都将延伸为创建新字符串和delete本身字符串两个操作,所以大大了增加开销。
对于StringBuilder类,其内部也只是封装的是一系列优化了的字符串操作方法,一个string类型,几个int类型,那么秘密应该就在于StringBuilder本身有着更好的字符串处理法则, 能够更高效地让GC回收自己在进行字符串串连过程中所产生的垃圾.
先到这,有了更加深入的剖析再继续。
4.其他相关连接
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=80802&SiteID=1
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=493185&SiteID=1
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=312581&SiteID=1
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndotnet/html/vbnstrcatn.asp