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 += ",";

新しい文字列が作成されます (文字列 intern poolにまだ存在しない場合)。

StringBufferchar arrayは、維持のみを使用して、これらの中間文字列を回避します。

StringBufferコスト/オーバーヘッドがあるため、String連結よりも常に効率的であるとは限りません。

String Builder のパフォーマンスに関する考慮事項から- MSDN

String または StringBuilder オブジェクトの連結操作のパフォーマンスは、メモリ割り当ての頻度によって異なります。
String 連結操作は常にメモリを割り当てますが、StringBuilder 連結操作は StringBuilder オブジェクト バッファが小さすぎて新しいデータを収容できない場合にのみメモリを割り当てます。
一定数の String オブジェクトを連結する場合は、String クラスを使用します。その場合、コンパイラは個々の連結操作を 1 つの操作に結合することさえできます。
任意の数の文字列を連結する場合は、StringBuilder オブジェクトを使用します。たとえば、ループを使用して乱数のユーザー入力文字列を連結する場合などです。

于 2012-12-29T04:47:08.550 に答える
0

string.Join を使用:

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

詳細については、配列を csv に変換する方法を検索してください。

于 2012-12-29T05:48:17.483 に答える