質問: null && objConn != null) { objConn.Close(); } } return dataTable; } ``` 問題点 --- 上記コードで取得件数が1000件以上ある場合、2分以上経過したあたりからOutOfMemoryを吐き出してしまいます。 知りたいこと ------ 取得するデータ量が多く、メモリ不足を起こしてしまう場合 どのような対策を講じればよいのでしょうか? コードよりも手法を知りたいです。 データベースはまだまだ勉強中の身ですので初歩的な質問かもしれませんがよろしくお願い致します! 不備等ありましたらご指摘の程お願い致します!
回答: 一度に大量のデータをメモリに入れるとメモリリークしやすいので,クエリを複数に分けて一回あたりに持ってくるレコード数の単位を区切りながら実行したり,LazyLoadingという仕組みを使って逐次読み込みでレコードを取得しメモリを解放するようにする仕組みを作ることが多いです。全てのレコードをメモリに突っ込まなければできない処理は基本的にマシンスペックを上げるしかありません。 検索した所こちらの記事が引っかかりましたが,lazyload C#などで調べると色々出てくるので調べて見てください。 上の例はreturnで実装されていますが普通はyieldを使う実装が多いとおもいます。