今天公司一个做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; }
}




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

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

  1. Lua大量字符串拼接方式效率对比及原因分析

    Lua大量字符串拼接方式效率对比及原因分析_AaronChan的博客-CSDN博客_lua字符串拼接消耗 https://blog.csdn.net/qq_26958473/article/detai ...

  2. 多用StringBuilder,少用字符串拼接

    在C#中,在处理字符串拼接的时候,使用StringBuilder的效率会比硬拼接字符串高很多.到底有多高,如下: static void Main(string[] args) { string st ...

  3. String 字符串拼接

    字符串拼接有两个方法 第一中 var sad = "happy" var variable = "you"+sad +"" variable ...

  4. C++ 基于STL的演讲比赛流程管理系统(sort算法+小型算法(accumulate)+内建函数对象+string字符串拼接+字符串截取+多个容器基础操作+与用户交互+文件的读写+保存+重建+整体文件数据的清空)

    1 /* 2 比赛规则: 3 学校举行一演讲比赛,共12个人参加,比赛两轮,第一轮为淘汰赛 第二轮为决赛 4 每名选手都有对应的编号:如10001~10012 5 比赛方式:分组比赛 每组6人 6 第 ...

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

    在java中,大家肯定都会遇到int类型转String类型的情形,知其然知其所以然.总结加分析一下,int类型转String类型有下面几种方式: a+"" String.value ...

  6. C# .Net String字符串效率提高-字符串拼接

    字符串操作是编程中非常频繁的操作,特别是在拼接字符串的时候.下面来说说字符串拼接的效率提升. 1. 减少装箱 值类型与引用类型之间的转换存在装箱与拆箱操作:将值类型转换成引用类型的操作叫装箱,将引用类 ...

  7. 为什么阿里巴巴Java开发手册中不建议在循环体中使用+进行字符串拼接?

    之前在阅读<阿里巴巴Java开发手册>时,发现有一条是关于循环体中字符串拼接的建议,具体内容如下: 那么我们首先来用例子来看看在循环体中用 + 或者用 StringBuilder 进行字符 ...

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

    字符串的拼接 String字符串虽然是不可变的字符串,但也同样可以进行拼接,只是会产生一个新的对象.String字符串拼接的时候可以使用"+"运算符或String的concat(S ...

  9. 从源代码的角度聊聊java中StringBuffer、StringBuilder、String中的字符串拼接

    长久以来,我们被教导字符串的连接最好用StringBuffer.StringBuilder,但是我们却不知道这两者之间的区别.跟字符串相关的一些方法中总是有CharSequence.StringBuf ...

随机推荐

  1. struts1吊牌&lt;logic:iterate&gt;

    <logic:iterate>主要用于处理网页上的输出集合,集合是其中一般下列之一: 1. java对象的数组 2. ArrayList.Vector.HashMap等 具体使用方法请參考 ...

  2. eclipse 在win7 64两个图标出现位操作系统无法锁定到任务栏或任务栏

    eclipse 在win7 64位操作系统无法锁定到任务栏或者任务栏上出现两个图标 解决的方法 eclipse在win7 64bit下无法锁定到任务栏问题(或是锁定后任务栏出现两个eclipse图标) ...

  3. 记一次tomcat故障排查(转)

    1~1024之间的端口号是保留端口,通常是为特定目的预留的.虽然你的问题不是由于保留端口引起的,但是仍然建议你不要随意使用保留端口作为自定义服务的端口,如果你能早早遵循这一规则压根就不会遇到这个问题. ...

  4. Linux/UNIX先进I/O

    先进I/O 非阻塞IO 非阻塞I/O因此,我们可以称之为open.read和write这种I/O操作,而这些操作不会永久阻止.我们假设,该操作不能完成,然后调用立即返回一个错误.则表示该操作将继续作为 ...

  5. Spring3+SpingMVC+Hibernate4全注解环境配置

    Spring3+SpingMVC+Hibernate4全注解环境配置 我没有使用maven,直接使用Eclipse创建动态Web项目,jar包复制在了lib下.这样做导致我马上概述的项目既依赖Ecli ...

  6. jQuery表格排序总成-tablesorter

    一个.进口单证 <script type="text/javascript" src="js/jquery.js"></script> ...

  7. springMVC框架建设进程

    1.创建Dynamic Web Project 2.导入spring和springmvc所须要的文件 3.配置web.xml文件 3.1 监听spring上下文容器 3.2 载入spring的xml文 ...

  8. DevExpress XtraReports 入门五 创建交叉表报表

    原文:DevExpress XtraReports 入门五 创建交叉表报表 本文只是为了帮助初次接触或是需要DevExpress XtraReports报表的人群使用的,为了帮助更多的人不会像我这样浪 ...

  9. 华为OJ: 公共字符串计算

    有几个需要注意的地方,这个问题是不是大写和小写之间的区别.这样你就输入字符串大写或小写转换的计算前. 第二个,定要清晰.先将s1从[i]处開始与s2的[j]開始匹配,不相等则j++直到j等于s2.le ...

  10. EF中的transaction的使用范例

    注意一点: 在EF中使用事物后,对于一个新增的model,在saveChanges后,可以得到该实体的自增ID,但在提交事物之前, 该数据并没有真正的新增到DB中,但此时可以得到model新增的自增I ...