中央競馬の予想や購入したもののメモなどを書いて行こうかと。まあ、個人的なメモ的なブログです。
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
少しご無沙汰でした。5月22日になったばかりの午前1時過ぎに体の異変で目が覚めた。風邪の症状で、念の為に体温計ると37.5℃で基本熱が出ない体質でコロナワクチン2回目の時に37.1℃まで上がったのが何十年ぶりだったんですが、ああ、こりゃコロナだと思い24時間対応って発熱相談に電話するも普通に週明けまで待って掛かりつけにて受診して下さいってな回答。日曜日は部屋に篭り、市販の風邪薬飲んで氷枕してたら少し落ち着いた。月曜日に掛かりつけの病院にコロナっぽいと電話してから受診し陽性。病院から保健所に通報されて自宅で保健所からの連絡待ち。自宅療養だと家族が危険なのでホテル療養希望して火曜日(5/24)から10日間程退屈な生活を。そんな訳で約2週間パソコンに触れない生活でした。
JRA-VANの提供データは仕様書なんかで諸々の定義がされてます。そんな中でキーにする項目で微妙な記述があります。馬毎レース情報のキーなんですが、馬番をキーにするか否か。
DoEventsではなく、マルチスレッド化で対処するのが今風?らしいが、これはなかなかハードルが高い。そもそも、JV-Link自体が32bitだったり諸々の事情からなのかマルチスレッドでの動作が遅くなる模様なので今回は宿題として残します。ってのもデータベース構築であまりにも時間掛かり過ぎて一向に開発進まないので、他の作り込み進めます。
まあ何にしても14時間掛かっていたフルセットアップが、今回高速モードオプション装備して、登録してるレコードの情報やログのリアルタイム更新を捨てて処理すれば2時間程度で可能になったので、フルセットアップも気軽にやり直せるのは嬉しい。高速モードじゃなくても6時間だったかな^^; 別にフルセットアップを延々と何登録してるか見てるってのもね~w これはここまでの名残として残すのもありかなって程度です。
結局の所、現在のデータベースは51ギガバイトと相変わらずなかなかのサイズです。最適化には2時間以上ですが、これも妥協ですね。
Windowsでのプログラミングの基本をVisual Basicで始めたのはもう30年近く前になるのかな~^^; ループで回して長い処理する時にはDoEvents入れよう的な習慣が染みついてたと思うんですが、それは昔の話? まあ、当初Windows2000かWindowsNTだったのかな?OSがMS-DOSでその上に乗るWindows Ver2.1辺りから使ってますが、当初はマルチタスクすら完全じゃなかったが、今ではしっかりとOSが頑張ってくれてる(?)ので、あまり意識する必要が無くなってるのかな?
4万件程度のレコード追加処理が非常に時間が掛かっており、バルクインサートまで試してみたのですが、一向に改善されなくて、ボトルネックを探ししてたんですが、SQLite関連全てコメントアウトして処理しても10%程度しか時間が減らず、ループの根本的な改善が必要なのかな~っと見てたんですが、
Application.DoEvents();
が時間食ってましたorz 4万件の登録で80秒がこれ削るだけで7秒とかに改善しました。ただ、当たり前ですが、その見返りとして、ステータスバーに登録してるレコードの簡単な表示したり、ログに出力してるんですが、これらがステータスバーの表示はされず、まあ、でもプログレスバーは動いてくれているのでハングではなく処理してるのは視覚的に分かるのはありがたいです。この辺りがOSがきっちりとマルチに動作してるおかげなんですかね? でも、ログの表示もリアルタイムじゃなく行毎にだったり、ログをスクロールバックして前を見ようとしても反応してくれないし、まあ、そもそも、アプリをクリックしても最前列に来ないとか...
代わりのってか、DoEventsで処理させていたものを個々に必要な部分のみ行う修正をして行かなきゃならなくなりました。フルセットアップなり更新処理なりの間に必須な事かは別として、可能な範囲はやってみたいと思います。