IronPython Concatenation

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 を利用しろという結論でした。