2006年5月28日の日記

<2006/05/29 2006/05/27>

100倍速くなる!!

RPG±0、どうしようか悩んでます。
正直、ずっと前からVBじゃ手に終えなくなりそうな気がしてならなかったんですよ。
VBじゃポインタが使えないし、オブジェクト指向も中途半端で扱いにくいし、そもそも遅いし、あまりいいことがなさそうな気がしてたんですよ。
しかし、だからといって全くできないわけでもないんですよね。
このままVBで押し通すか、それとも別の言語で1から作り直すか、いずれにしても具体的な実現方法を考えないことには始まらないんですよね。
とにかく、いけるかどうか判断できないことには中止も続行もできません。

NeoMupl進めてみました。
曲数が多くなるとリストの読み書きが異常に遅くなるのでその対策を。
2500曲程度で最低7秒かかるみたいなんですよね。
前のアルゴリズムだと処理時間がO(n2)なので5000曲あれば約30秒かかる計算になります。
気の長い人なら待てないこともなさそうですがやっぱり遅いものは遅いです。
そこで、ファイルの内容がINIに近いのでINIファイル関連のAPIを使ってみたのですが、結果はというと惨敗。
以前の方式と比べて、1項目編集するたびにファイルの読み書きが入るので一つ一つの動作が半端じゃなく遅いんですよ。
しかも毎回項目を探すから処理時間のオーダーは変わらずO(n2)となるはずです。
たとえもっと効率がよかったとしても、同じ2500曲で50秒以上というのはいくらなんでも時間掛けすぎです。
さすがに気の長い人でも待ちきれません。
そこでしぶしぶ汎用の読み書きクラスを使うのをやめて、使いまわしの効かない専用のコードを書いてみたのですが、これがすごくて…。
さっきと同じ条件でなんと書き込み時間70ミリ秒ですよ!!!
全く誇張なしで100倍速いんです!!!
しかも処理時間のオーダーはO(n)なので、データが2倍になれば前より更に2倍効率がよくなるんです!!!
もう!こうなるとわかってりゃあんな使いまわしは効くけど遅いクラスなんて作ってなかったのに!!
そうそう、今日作ったのは書き出しだけで中途半端なので最新版アップはなしです。

<2006/05/29 2006/05/27>