ものがたり(旧)

atsushieno.hatenablog.com に続く

PythonSpeed

matzにっき経由。
http://newworld.ddo.jp/wiki/PythonSpeed

PythonでもRubyでも通用する高速化*1のテクニックは、実のところMonoでもだいたいは通用します。まあ、高速化のテクニックっていうのは、対象バージョンによってかなり変わるものなんだけど。

関数の中で、ローカル変数はグローバル変数、組込み定数、属性の参照より高速にアクセスされます。そのため、内部ループの中に局所化したローカル変数へアクセスするより遅くなることがあります。例えば、 random.shuffle()というコードを random=self.random という1文で局所化します。これによってshuffleのループがself.ramdomを何度も参照するのを防ぎます。ループの外側で、向上率は非常に小さいかまれに悪くなることもあります。

この辺は現行バージョンのMonoだとどうかな。conspropがあってregallocが無いので、むしろ局所変数代入の分だけ遅くなるかも。CPythonにregallocがあるかどうかは知らないけど。

思いつきで書いてるだけなので、やってみれば分かる気もする。

*1:「最適化」というとメモリ効率と実行速度の間で葛藤が生じることがあるので、ここでは高速化に限定