IronPython の文字列は str でもあり System.String でもある。
つまり += で文字列結合ができる。
+ と += って結合速度に違いがあるのかな?
そう思って StringBuilder も含めてテストしてみた。
# -*- coding: UTF-8 -*- """ Benchmark Decorators """ from System import * from System.Diagnostics import Stopwatch from System.Text import StringBuilder def bench(func): def wrapper(count): sw = Stopwatch.StartNew() for i in range(count): func(count) print sw.Elapsed return wrapper s = "" t = "" sb = StringBuilder() @bench def plfunc(count): global s s = s + "a" @bench def eqfunc(count): global t t += "a" @bench def sbfunc(count): sb.Append("a") plfunc(100000) eqfunc(100000) sbfunc(100000)
ちょっと強引なコードだけどデコレータを使ってみたかっただけ。
結果、もちろん 1.2GHz CULV マシンでの結果ですので性能チェックにもどうぞ。
00:00:40.2863338 00:00:39.7391895 00:00:00.1128512
ほとんど誤差の範囲です、処理は += も + とどうやら同じようです。
てゆーかやはり StringBuilder を利用しろという結論でした。