2024/03/24

CSV出力での工夫

昨晩通常用の学習終了後に順位学習用CSV出力始めて寝て起きても終わらず断念しました。今日のレースに支障が出るからです。で、順位学習用CSV出力のコードを眺めてたんですが、何で時間掛かっているのか気になったんです。

  1. for (int i = 0; i < tousu; i++)
  2. {
  3. RJSrc rJSrc = new RJSrc(...,Convert.ToByte(i+1),chakujun[i]);
  4. rj.Add(rJSrc);
  5. }

ループ内でクラス生成してリストに追加してましたが、このクラス基本的に最後の2項目のみ違うだけでそれ以外は共通なんです。ループ内でオブジェクトを繰り返して生成するのは時間が掛かります。そこでRJSrcをクラスではなく構造体に変更し

  1. RJSrc rJSrc = new RJSrc(...,0,0);
  2. for (int i = 0; i < tousu; i++)
  3. {
  4. rJSrc.Umaban = Convert.ToByte(i+1);
  5. rJSrc.Juni = chakujun[i];
  6. rj.Add(rJSrc);
  7. }

とする事で格段にスピードアップする事が出来ました。肝はclassは参照型で構造体は値型って事をCopilotに教えてもらいました😁

追記 2024.3.24 12:11
1990年~2023年の34年分出力して2時間12分で出力完了。前回5時間とか書いてたので半分以下に短縮されました。

0 件のコメント:

コメントを投稿