2024/03/24

CSV出力での工夫

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

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

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

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

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

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

0 件のコメント:

コメントを投稿