大量データをコレクションに格納するとメモリ使用量が跳ね上がってしまいます。
メモリを圧迫するとOut Of Memoryエラーなど、処理に影響が出るため、
コレクションを使い終わったら、メモリを解放して動作に支障が出ないようにする方法について試してみました。
試すこと
GC.Collect()を使ってメモリ開放がうまくいくか
(参考)
How do I avoid Out Of Memory issues in the blue prism?
![](https://falcslab.com/wp-content/uploads/2020/05/image-25-1024x288.png)
手順
Excelににカラム数20、30000件のデータを用意します。
![](https://falcslab.com/wp-content/uploads/2020/05/image-26-1024x389.png)
以下のようなフローを用意します。
データ取得ブロック内の処理で、Excelを読み込み、コレクションに格納するフローです。
![](https://falcslab.com/wp-content/uploads/2020/05/image-27.png)
格納したコレクションデータを削除します。
これにより、”Data”コレクションがガベージコレクションの対象としてマークされます。
![](https://falcslab.com/wp-content/uploads/2020/05/image-28.png)
GC.Collect()でメモリ開放します。
![](https://falcslab.com/wp-content/uploads/2020/05/image-29-1024x633.png)
上記の流れにおいて、メモリ使用量の推移をタスクマネージャーで監視します。
![](https://falcslab.com/wp-content/uploads/2020/05/image-30-1024x352.png)
結果
コレクションにデータ格納前
![](https://falcslab.com/wp-content/uploads/2020/05/image-31-1024x413.png)
コレクションにデータ格納後
メモリ使用量が跳ね上がりました。
![](https://falcslab.com/wp-content/uploads/2020/05/image-32-1024x394.png)
コレクションデータを全削除
メモリ使用量はほとんど変わりません。
![](https://falcslab.com/wp-content/uploads/2020/05/image-33-1024x392.png)
ガベージコレクション実行
データ格納前のメモリ使用量に戻りました。
![](https://falcslab.com/wp-content/uploads/2020/05/image-34-1024x393.png)
注意点
あまりに大量のデータをコレクションに格納しようとすると、OutOfMemoryになってしまいます。
以下の例では10万件のデータを読み込もうとするとエラーになってしまいました。
適切なデータ量で捌いていく実装にしましょう。
![image.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F186221%2Fb0ee501f-10f2-0472-d1df-a43cea9193cb.png?ixlib=rb-1.2.2&auto=format&gif-q=60&q=75&s=40b66863d12b249796f489fee2d83c4e)