最近写项目 遇到的一个 问题~需要拼接 字符串~ 量不是很大(汗...) 都类似是 一:  url = "..." + id + "..." + name;这类挺短的,后来改成了 二:  url = string.Format("...{0}...{1}",id,name);这种小拼接的 字符串 大概需要 10多个~ 所以 就联想到的 效率问题~
我想问 到底是 直接 一 类型的~ 还是 二 类型的   哪个效率能好点呢~ 基本上 用不到StringBuilding 求真相! 吃饭啦  吃完饭回来 哈!

解决方案 »

  1.   

    用stringbuilder 吧,效率比拼接的要好吧,量不大的话两种都差不多
      

  2.   

    MSDN上的原话:
    如果您串联的字符串数量不那么巨大(例如,在循环中),那么这些代码的性能成本可能不会很高。上述情况同样适用于 String.Concat 和 String.Format 方法。
    Concatenate Multiple Strings
    这些代码指的是通过+的方式进行字符串连接.比较String.Format和+这样的字符串连接方式,本身意义不大.
      

  3.   


    对于 url = "Default.aspx?id"+id; 或 url = string.Format("Default.aspx?id={0}",id); 
    这样的 字符串 没必要 用 StringBuilding 吧~ 这样反而会对效率造成影响我一般是在 很大量的 字符串拼接的时候 使用 StringBuilding ~
      

  4.   


    stringbuilder 效率是最高不过
    10多个没必要考虑效率问题吧?
    直接用第二种……
      

  5.   


    这样的话 是不是 就没必要 非得 区分 普通拼接 和 string.Format 格式化 的效率对比了?可是 我在GOOGLE 上搜到了一个 帖子不是 这样说的http://topic.csdn.net/t/20050606/13/4062436.html所以 自己比较郁闷~
      

  6.   


    是啊 我就是在简单字符串拼接的时候 全部改成了 string.Format  所以就像到了 是否会影响效率
      

  7.   


    不是说 10多个一块拼接是 这样的~~
    string url1 = "...";
    string url2 = "...";
    string url3 = "...";
    string url4 = "...";
    ...
    string url10 = "...";
    stirng十多个string变量  每个string变量 几乎都是 拼接字符串组成的 所以就会 想到效率的问题
      

  8.   

    如果id是数字,不是字符串,写成id.ToString。如果你的值类型变量都写了.ToString()。那么你第二种方法也不是很慢。
    1,2方法是等效的,效率上没差别。这里用StringBuilder反而开销更大。多个字符串相加,你逻辑就是如此,是无法避免的,StringBuilder只是缓存字符数组来达到避免创建过多的字符串对象,但在你这里,拼接并不会创造很多的string。而是一个,因为那叫做初始化。
    事实上,我更倾向于第一种写法,第二种写法貌似直观,真要是拼接的多了,比如{27},所表示的变量是哪一个,你不要数一阵子?
      

  9.   

    涉及到拼接,肯定首选stringbulid()
    他不是只用来处理大字符串的,他自己会伸缩内存占用,自己会扩展,不存在你字符短就效率差的问题
      

  10.   


    这个不一定吧~  不是每种 字符串 拼接都得用 StringBuilding 的吧
      

  11.   

    大哥们看看 String.format 的源码你们就知道了
       return new Formatter().format(format, args).toString();    public Formatter() {
    init(new StringBuilder(), Locale.getDefault());
        }
        private void init(Appendable a, Locale l) {
    this.a = a;
    this.l = l;
    setZero();
        }
        而StringBuilder extends AbstractStringBuilder 
        AbstractStringBuilderimplements Appendable
        所以二都的性能应该是相当的
      

  12.   

    大量字符串的拼接用StringBuilder,少量则用字符串相加,能用+=则更好,string.format的效率是低下的,它的内存其实是params object[] +StringBuilder,params也是低效的,字符串相加,或是取其中的一部分都是要重新分配内存,然后将对应的字符串存入。FCL大部分代码都是用C#写的,而操作字符串这一块用的是非托管代码写的,处于对性能的考虑。
      

  13.   

    大量字符串的拼接用StringBuilder,少量则用字符串相加,能用+=则更好,string.format的效率是低下的,它的内存其实是params object[] +StringBuilder,params也是低效的,字符串相加,或是取其中的一部分都是要重新分配内存,然后将对应的字符串存入。FCL大部分代码都是用C#写的,而操作字符串这一块用的是非托管代码写的,处于对性能的考虑。