func likeJoin(times int) string { c := len(tests) // 結合後の byte 数を得る size := 0 for n := 0; n < times; n++ { size += len(tests[n%c]) } // バッファを必要な分確保する buffer := make([]byte, size) // 文字列のコピー bp := 0 for n := 0; n < times; n++ { bp += copy(buffer[bp:], tests[n%c]) } return string(buffer) }
で、結果は
--- loop: 10 times: 10000 ---と、likeJoin()が一番速かった。
concat() 5,168,710,000 ns
useBuffer() 8,419,000 ns
likeJoin() 6,055,000 ns
--- loop: 10000 times: 10 ---
concat() 27,746,000 ns
useBuffer() 18,199,000 ns
likeJoin() 10,946,000 ns
一見、ループが無駄っぽいけど、メモリの再割当てに比べればずっと実行コストは安いってことね。
0 件のコメント:
コメントを投稿