株価データの形式と操作方法の変更
常時メモリ使用量が130MB増えるのは個人的には気持ちが悪いです 必要になる銘柄だけ読み込み対象にする方式ではまずいでしょうか
失礼しました。ファイルアクセス数を減らしたいということですね。 どれくらい早くなるかにもよりますが、panacoranさんの環境で顕著に改善があるならこれでいきましょう
ファイルアクセス数よりもファイル数が効いているので、必ずしもオンメモリである必要はないです。データ形式を圧縮データを結合した1ファイルにするだけで十分です。データ更新は、まず更新データをメモリに置いて、あとで元のデータファイルとすりあわせて新しいデータファイルを作れば十分早くなると思います。
あとは#26572の問題ですが、
の選択肢があります。ちなみに圧縮されたデータの伸張は一瞬でできます。
他銘柄を参照するパターンがどんなふうになりうるか僕には読めないので、daraiさんの判断に従います。オンメモリにするのは、こういう判断をしなくてもすむので楽でいいかと思っただけでして。
2にしましょう。現在のデータ量では何とか動く見込みですので。動かして問題が出たら3や、#26572ではじめに書いた範囲制限を新たに検討します。ちなみに、範囲制限は参照のあった日付の前後100日程度をキャッシュする方法を考えていました。こうすると100日程度ごとに読み込み直しが起きると想定されます。1は、全銘柄毎回参照する場合に再読み込みの頻度が多くなり、実行速度への影響があると思いました。
了解しました。その方向で実装してみます。
次のバージョンに先送りします。
現在のデータ形式は1銘柄1ファイルになっていて、データ更新の際には直接ファイルを書き換えている。ファイル操作にはマルウェア対策ソフトの検査が入るため更新に時間が掛かる。また、ファイルが圧縮されていないためディスク使用量も比較的多い。
そこでまず1銘柄の全期間のデータをDeflateで圧縮して、全部つなげたものをデータ形式にする。プログラムで読み込む際には、Deflateで圧縮したまま全銘柄のデータをメモリに読み込む。各銘柄のデータは必要になったときにオンデマンドで伸張する。データ更新の際は、更新の必要なデータをすべて伸張してメモリに対して実行し、終了した時点で圧縮してファイルに書き戻す。
これによりデータ更新の速度が上がり、PtSimから複数の銘柄にアクセスする際のファイルアクセスを減らすこともできる。増えるメモリ使用量は130MB弱である。更新時には一時的にメモリ消費が増えるが、ファイルに書き戻す際に伸張したデータを破棄するのでメモリ消費は元に戻るはず。