C#的StringBuilder 以及string字符串拼接的效率对照

今天公司一个做Unity3d的人在说字符串拼接的一个效率问题,他觉得string拼接会产生新的一个内存空间,假设不及时回收会产生大量的碎片,特别是在Unity3d这样一个Updata环境下,由于每一帧都会调用,所以假设使用简单的拼接的话,就会产生非常多碎片,从而影响手机发热。

他的想法是用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; }
    }

最后结论就是,简单的拼接会比不论什么函数和方法来得有效!!欢迎拍砖!!

时间: 2024-09-28 08:41:44

C#的StringBuilder 以及string字符串拼接的效率对照的相关文章

java int转String全部方式的效率对照与深入解析

在java中,大家肯定都会遇到int类型转String类型的情形,知其然知其所以然.总结加分析一下,int类型转String类型有下面几种方式: a+"" String.valueOf(a) Integer.toString(a) 以上三种方法在实际使用过程中都是没有问题的,可是效率上还是有些许区别的,所以写个小程序来对照一下他们的效率: int a = 123456789; long start = System.currentTimeMillis(); for (int i=0;

.NET中string与StringBuilder在字符串拼接功能上的比较

来自森大科技官方博客 http://www.cnsendblog.com/?p=86 .NET中string与StringBuilder在字符串拼接功能上的比较string与StringBuilder的在字符串拼接时执行效率上有差异,因为StringBuilder类中用了一个技巧:它申请了两倍的内存空间存放字符串,在调用Append方法拼接字符串时,会先检查剩余的空间是否能放下要拼接的字符串,若能放下,则将要拼接的字符串Copy到剩余的空间中,若不能放下,则再申请拼接后的字符串两倍的长度空间,将

java 字符串拼接的单元测试

整体内容介绍 本文分为几个部分: * String.StringBuffer.StringBuilder的对比 * 字符串拼接方式的对比 使用到的内容: * Junit4单元测试 * slf4j的日志框架 String.StringBuffer.StringBuilder的对比 对于这三者使用的场景做如下概括(参考:<编写搞质量代码:改善java程序的151个建议>): String:在字符串不经常变化的场景中可以使用String类,如:常量的声明.少量的变量运算等. StringBuffer

[ Java学习基础 ] String字符串的基本操作

字符串的拼接 String字符串虽然是不可变的字符串,但也同样可以进行拼接,只是会产生一个新的对象.String字符串拼接的时候可以使用"+"运算符或String的concat(String str)方法.其中"+"运算符的优势是可以连接任何类型的数据拼接成为字符串,而concat方法只能拼接String类型的字符串. 示例如下: 1 String s1 = "Hello"; 2 // 使用+运算符连接 3 String s2 = s1 + &q

字符串拼接大全

一.c语言字符串拼接函数 头文件包含#include<string.h> 函数原型:char *strcat(char *dest, const char *src); 参数:dest 为目标字符串指针,src 为源字符串指针. strcat() 会将参数 src 字符串复制到参数 dest 所指的字符串尾部:dest 最后的结束字符 NULL 会被覆盖掉,并在连接后的字符串的尾部再增加一个 NULL. 返回值:返回dest 字符串起始地址. note:dest 与 src 所指的内存空间不能

java中字符串拼接 String 和 StringBuilder(StringBuffer)的使用

字符串拼接是个常用的功能,经常性使用String做字符串拼接,当拼接次数多的时候,使用String方法会消耗大量的性能和时间,因为每次String拼接时都会建立一个新的对象,随着拼接次数的增多,性能消耗.时间消耗会大量增加,这个时候应该使用StringBuilder方法. 1 public static void main(String[] args) { 2 try { 3 int count = 500; 4 5 long begin = System.currentTimeMillis()

C# 字符串拼接性能探索 c#中+、string.Concat、string.Format、StringBuilder.Append四种方式进行字符串拼接时的性能

本文通过ANTS Memory Profiler工具探索c#中+.string.Concat.string.Format.StringBuilder.Append四种方式进行字符串拼接时的性能. 本文涉及程序为.NET Core 2.0控制台应用程序. 一.常量字符串拼接 private static void TestPerformance(Action action, int times) { Stopwatch sw = new Stopwatch(); sw.Start(); for(i

StringBuilder与StringBuffer的区别(转) &amp;精简版StringBuilder,提速字符串拼接

以下这部分转子连接 http://www.cnblogs.com/Fskjb/archive/2010/04/19/1715176.html 相信大家看到过很多比较String和StringBuffer区别的文章,也明白这两者的区别,然而自从Java 5.0发布以后,我们的比较列表上将多出一个对象了,这就是StringBuilder类.String类是不可变类,任何对String的改变都会引发新的String对象的生成:而StringBuffer则是可变类,任何对它所指代的字符串的改变都不会产生

String、StringBuffer、StringBuilder在进行字符串拼接时性能比较

String不适合做字符串拼接,每次会new新对象,效率最低,StringBuffer和StringBuilder效率高,StringBuffer线程安全,速度相对慢,用的少,只有在考虑线程问题时才使用.StringBuilder线程不安全,速度看,用的多.例: public class StringStringBuilderStringBuffer { int count=1000; public static void testString(){ Long start=System.curr