0

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

     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);

我只是好奇...

谢谢

4

3 回答 3

1

一个StringBuilder对象,确定吗?

例如

        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

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

于 2012-12-29T02:25:24.473 回答
0

当您使用连接时,例如

str_orderbycity += ",";

创建一个新字符串(如果字符串实习生池中尚不存在)。

StringBuffer通过只使用维护来避免那些中间字符串char array

StringBuffer有它的成本/开销,所以它并不总是比String串联有效。

字符串生成器性能考虑 - MSDN

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

于 2012-12-29T04:47:08.550 回答
0

使用字符串。加入:

string myStr = string.Join(",", myArray.Select(n => n.ToString()).ToArray())

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

于 2012-12-29T05:48:17.483 回答