質問する
208 次
2

スレッドのスタックに割り当てられたものを使用して、ポインターを使用して文字ごとに文字列を作成することにより、広範なStringBuilder.Append()操作を最適化できますか?char[]

        unsafe
        {
            const Int32 width = 1024;

            Char* msg = stackalloc Char[width];

            Int32 index = 0;

            property = Environment.MachineName;

            for (Int32 i = 0; i < property.Length; i++)
                    msg[index++] = property[i];             

            return new String(msg, 0, width);
        }

これにより、使用する場合と比較して約25%の改善が得StringBuilderられ、結果として満足のいくものではありません。

4

1 に答える 1

7

最終的な文字列の大きさについて前もって考えている場合は(そう思われるように)、StringBuilder最初からその容量でを構築できるため、スペースの再割り当てにかかる時間が短縮されます。

var sb = new StringBuilder();   
// capacity 16, will expand as needed

var sb30000 = new StringBuilder(30000);   
// capacity 30000, will not need to expand until that length is passed

これは少し役立つかもしれません。

于 2012-06-21T08:13:56.713 に答える