2007 03 12

高速化

遅かったExcelの処理を速くした。

今回、Excelは取り込んだデータを表やグラフで見せるだけのもので、見る人がそれを更に加工したりはしない。 なので、各セルに式を埋め込むのではなく、埋め込む式相当でデータ取り込み時に計算し、その結果をセルに設定することにした。 これ、元々そうしていたのを、諸般の事情で、流用元の実装と同じ式の埋め込みに戻したんだよね。 その後、また事情が変わって、式埋め込み方式じゃなくてもよくなったんだけど、そっちに手を入れる時間が無くてそのままにしていたもの。 また元に戻すのはちょっと空しかったりするのだが、背に腹は替えられない。

後は、定番の高速化。 オブジェクトを"."でダラダラ繋げないで、withを使うか、操作対象のオブジェクトの参照をループの外で取得しておく。 制御情報としてセルに記述した一連の値を、あらかじめ配列で保持しておく。 内容を書き換えるシートを、更新完了まで表に出さない。

そんなこんなで、2時間以上かかったものが1分弱になった。 でも、まだ1分近く 「も」 かかるんだよな。 出発点が2時間以上だったから物凄く改善されたように思うけど、実際に使う人は、そういった経緯は知ったこっちゃ無いし。 どうしよう。 もうちょっと手を入れるかな。

と思ったのだが、変更前のものは、今のおよそ3分の1のデータ量で1分ぐらいかかっていたそうだ。 であれば、一応速くなってはいる。 と、少々納得いかないながらも、ここで妥協したのだった。