运行测试和添加char或最后删除的成本?

时间:2012-12-29 02:17:29

标签: c# arrays string

从数据表之类的东西连接字符串时,最快/最少的资源成本计算是什么?例如:

     for (int i = 0; i < darray.Length; i++)
            {
                str_orderbycity += darray[i]["Sort_Order"].ToString() + ",";
                if (i < (darray.Length - 1))
                {
                    str_orderbycity += ",";
                }
            }

或等到结束然后在字符串上运行remove方法:

      str_orderbycity = str_orderbycity.Remove(str_orderbycity.Length - 1, 1);

我只是好奇......

由于

3 个答案:

答案 0 :(得分:1)

肯定是StringBuilder个对象?

e.g。

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < darray.Length; i++)
        {
            sb.Append(darray[i]["Sort_Order"].ToString());
            sb.Append(",");
        }

        if (darray.Length > 0)
            sb.Remove(sb.Length - 1, 1);

唯一的功能是构建字符串。见StringBuilder

而且,我相信,最好在循环后测试一次,然后删除。

答案 1 :(得分:0)

使用连接时

str_orderbycity += ",";

创建一个新字符串(如果string intern pool中尚未存在)。

StringBuffer仅使用维护char array来避免使用这些中间字符串。

StringBuffer有其成本/开销,因此并不总是比String连接更有效。

来自String Builder Performance consideration - MSDN

  

String或StringBuilder对象的串联操作的性能取决于内存分配的频率   字符串连接操作始终分配内存,而StringBuilder连接操作仅在StringBuilder对象缓冲区太小而无法容纳新数据时才分配内存。   如果要连接固定数量的String对象,请使用String类。在这种情况下,编译器甚至可以将单个级联操作组合到单个操作中   如果要连接任意数量的字符串,请使用StringBuilder对象;例如,如果您使用循环来连接随机数量的用户输入字符串。

答案 2 :(得分:0)

使用string.Join:

string myStr = string.Join(“,”,myArray.Select(n =&gt; n.ToString())。ToArray())

搜索将数组转换为csv以获取更多信息。