JRA公式競馬データ配信サービス JRA-VAN Data Lab.

JRA-VAN DataLab.

競馬ソフト開発コーナー

JV-Dataの使い方あれこれ

記事リスト  |  新着記事  |  ワード検索  |  過去ログ
タイトルC#でのメモリ解放関連
投稿日: 2023/09/20(Wed) 07:02
投稿者サメの餌
まささん、おはようございます。

> 1986年から一気にすべてのデータを落とそうとすると、メモリリークが原
因っぽ

まささんはC#でしたっけ? VB.NETでは問題ないって事だったかと思いますが、C
#の場合はJVGetsでの読込でのバッファの開放が面倒で、ここの「JV-Link 質問
箱」で過去ログにあるんですが、過去ログで"P 00006"を選択すると2
ページ目辺りにNo.6853の「C#でのメモリ解放」という たかひろさん が立て
たスレッドがありますので参考にするとよろしいと思います。
C#でもJVGetsでもなかったら見る必要はないかとは思いますか、ここにも1ヶ月
毎に区切るとセットアップ時間が短縮される感じの話もあります。

自分の方法はまだまだな感じで更に効率よく出来るとは思いますが、上の過去
ログのたかひろさんが確かソースへのリンクも張ってたかと思いますが、それも
参考になるかと。"RACE"に対して期間指定して「レース詳細」取得し
て、更に別のJVOpenで"RACE"して今度は「馬毎レース情報」的に行う
と無駄にJVOpenする事になるかもです。"RACE"で飛んでくる13種類で
自分の必要ない情報だったらJVSkipして必要なものはDB登録する方が効率は良く
なるんじゃないかと。

まささんはMySQLでしたっけ?ちょっと触った事がないのでイメージが出来ませ
んが、SQLiteではDB接続してコマンド準備してSQL実行して接続切るの繰り返し
が基本なんですが(実際にはトランザクションとかも入れて)、この処理も自分は
最初毎月のdataspec毎にしてたんですが、今はDB接続をセットアップ開始時に1
回のみで、セットアップ完了してようやくDB接続解除してます。コマンドもセッ
トアップで使うであろう物全てを準備しておいて、セットアップ中は使い回す。
等々の工夫で無駄な処理を省いて時間短縮しました。
これが正攻法かは分かりませんが極力無駄を省く様に、更にJRA-VAN提供の構造
体使うのも止めてます。これすると確かにソースコード的には見た目も分かりや
すい感じではありますが、JVGetsからのバッファから直接的にDBコマンドに値を
設定した方が高速化出来ました。

作り始めた時には何度もセットアップしなきゃならず、しかも14時間とか掛か
ってましたので、バグつぶしてまた待ってが苦痛でした。あっ、僕の場合ですが
、元々VB.NETでEntityFrameworkのコードファーストでDB定義して的なスタート
で14時間どころかまささんの3日間以上だった感じです。SQLiteはEntityFramewo
rkでのアクセスではトランザクションが微妙で、ちょっと正確には把握してませ
んが余分にトランザクションが入っているのかそもそも入ってないのかデータ登
録が激遅だったんです。なので、EntityFrameworkでのコードは全て無駄で書き
直し。

後は「ループ処理にはApplication.DoEvent()」的にWindowsアプリのコーディ
ングしてたんですが、このDoEventがかなり重くて、これを減らす事で随分早く
なりました。

ちょっと長くなりましたが、参考になれば幸いです。
- 関連一覧ツリー(● をクリックするとツリー全体を一括表示します)
返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)
おなまえ
Eメール
タイトル
メッセージ   文字モード 図表モード
URL
パスワード (英数字で8文字以内)
  プレビュー
- 以下のフォームから自分の投稿記事を修正・削除することができます -
処理 記事No パスワード
ウィンドウを閉じる