MIT’s blog

個人的なメモかな

JVRead vs JVGets

ブログにはひと月ぶりの書き込みですが、昨年末からの入退院の繰り返しもどうにか一段落したので、本業の三交代勤務でプログラミングし放題ではなくなったので、若干のスローダウンはしてますが、開発は続行中。今現在も通算何度目になるのか分からなくなってるフルセットアップ実行中。

 

実は先週初めからここまでのJV-Linkでのデータ読込にJVReadを使ってたのを思い切って変更してみようと着手。開発当初から少しパフォーマンスが上がると言われるJVGetsの存在は知ってたけど、メモリリークが改善出来ず、1年分取得途中でメモリ不足で止まるんだったか、まあ、対処にあまり時間取られるのも嫌だったのでJVReadで開発進めてました。で、JRA-VAN掲示板にて参考になる書き込みが有り、少しでも改善されるならとJVGetsでのデータ読込に書き換えてテストしてたりしました。

まあ、C#では自動でガーベッジコレクションされるからって事が逆に仇になってる感じで、JVGetsで取得するデータをデータベースに登録する際にゴニョゴニョしてると一向にガーベッジコレクション対象と認識されないって事の様で、この対処方法としてSafeArrayなるものを利用すればって話で、これ使ってJVGetsを採用する事が可能になりました。で、JRA-VANからデータ構造体なんかのクラス定義等が提供されているんですが、このC#版に実装されているメソッドが当初は文字列を構造体に代入する感じなのが普通に思えてたんですが、今回のSafeArrayかます関係でbyte配列を文字列にしてこのクラスメソッドにすると結局オーバーヘッドが高くなりJVReadからJVGetsへ変更るメリットが帳消しになると思ってたら、このクラス自体文字列で受けてわざわざbyte配列に最初にコピーしてるではないですか。で、このクラスをbyte配列を受けて構造体に代入するものを書き加えて後数時間で、JVGetsでのフルセットアップが終わる予定です。

JVReadでのフルセットアップには14時間17分掛かってました。本日中番出勤直前まで作業して12:19にセットアップ開始してるので、そろそろ12時間経過。もう少しで2018年まで終わりそうなので、残り3年ちょいは2時間までは掛からないだろうから多少の改善は見込めそう^^