プロファイル事始-その1

こんにちは。お久しぶりです。本当にお久しぶりです。
ここのところしばらく大学で奔走しておりました。ちょっと生活パターンができてきたので更新ペースを徐々に戻して行きたいと思います。

それはさておき、今回のテーマはプロファイリングです。
皆さんプロファイルしていますか? 今回は一応OpenOffice.orgのcalcで考えてみましょう。

なぜcalcか対象かと言われると、それはもうなんとなくこのブログがOOo関係って感じがしているからですが。

さて、さすがにOOoBasic用のプロファイラはないでしょうね。一応軽くググって見ましたが、見当たりませんでした。とはいえ、比較的大きなデータを処理することの多いcalcやbaseでマクロを組む場合、OOoBasic自体はお世辞にも高速とはいえないと思うので、最適化が必要な場合もあるでしょう。

で、そんなとき、プログラマの間に「早過ぎる最適化は諸悪の根源である」という格言があるのは周知と思いますが、要はポイントをじっくり絞ってやらないと、余計にだめなコードになってしまうかもよってことですな。つまり、速度的にクリティカルなところを抉り出す作業が必要なわけです。

で、プロファイラがあれば楽にそういうことをやってくれるので、便利ですが、今回はありません。で、自前でベンチマークするのがいいんでしょうね。つまり

StartTime = getSystemClock() '適当ですこんな関数ありませんよ。
なんたらかんたら
処理がある
ProcTime = getSystemClock() - StartTime

といった形で。じゃあどうやって時間を取得するのか。これは結構面倒くさいんですな。
OOoBasicの組み込み関数でも取得はできますが、秒単位なのでこういうときには分解能が低すぎてだめです。効果的な最適化対象を見つけるなら最低ms(1/1000秒)単位は要るんです。最近のPCは性能が高いですからね。

ではどのようにしてそれらを取得するのか。意外と長くなる予定なので、次回に続きます。幸運にも次回の更新までにこの記事を見た人はよければちょっと考えてみてください。