C#的StringBuilder 以及string字符串拼接的效率对照
今天公司一个做Unity3d的人在说字符串拼接的一个效率问题,他觉得string拼接会产生新的一个内存空间,假设不及时回收会产生大量的碎片,特别是在Unity3d这样一个Updata环境下,由于每一帧都会调用,所以假设使用简单的拼接的话,就会产生非常多碎片,从而影响手机发热。
![](//img-blog.csdn.net/20140418164642203?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmVpMnl1bg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
他的想法是用StringBuilder去直接改动内存,而不进行一个拼接会更加直接有效的去运行,速度也会更快。
由于认为这个东西有点意思,所以我就想做个对照来看,是不是自己老了记错了事情,特别是我是做服务端的,效率才是我考虑的,而内存在2014年的今天,难道白菜还不比内存贵?呵呵!
下面是一个简单的代码,还有结果图,我没什么文化,所以就不继续说明了,有想法的能够评论指点一下,谢谢!
class Program { static void Main(string[] args) { Console.WriteLine("1000万次运算:"); DateTime dt = DateTime.Now; xxx xxx=new xxx(); const int testNum = 10000000; StringBuilder strbuilder = new StringBuilder(); strbuilder.Append("M"); for (int i = 0; i < testNum; i++) { strbuilder.Append(i.ToString(),0,i.ToString().Length); xxx.text = strbuilder.ToString(); strbuilder.Remove(0, strbuilder.Length-1); } Console.WriteLine("StringBuilder:" + (DateTime.Now - dt).Ticks); Console.WriteLine("\r\n"); strbuilder.Remove(0, strbuilder.Length); strbuilder.Clear(); strbuilder = null; dt = DateTime.Now; for (int i = 0; i < testNum; i++) { xxx.text = i+"M"; } Console.WriteLine("String拼接:" + (DateTime.Now - dt).Ticks); Console.WriteLine("\r\n"); dt = DateTime.Now; for (int i = 0; i < testNum; i++) { xxx.text = string.Format("%Sm", i.ToString()); } Console.WriteLine("String.Format拼接:" + (DateTime.Now - dt).Ticks); Console.ReadLine(); } } public class xxx { public string text { get; set; } }
最后结论就是,简单的拼接会比不论什么函数和方法来得有效!!欢迎拍砖!!