|
分類:[.NET 全般]
複数のPNG画像からイメージをマルチスレッドで取得したいのですが、
Dim ParallelOpt As New ParallelOptions() With {.MaxDegreeOfParallelism = -1}
Parallel.For(0, 10001, ParallelOpt,
Sub(i As Integer)
Dim bmp1 As New Bitmap(filepath(i))
bmp1.Dispose()
bmp1 = Nothing
End Sub)
のようにすると、毎回ではないのですが、
たまに、
Dim bmp1 As New Bitmap(filepath(i))
のところで、
型 'System.OutOfMemoryException' の例外が System.Drawing.dll で発生しましたが、ユーザー コード内ではハンドルされませんでした
追加情報:メモリが不足しています。
となって、プログラムが落ちてしまいます。
コア数が10、スレッド数が20のCore i7 extremeを使用しているのですが、
.MaxDegreeOfParallelism = -1
のところを10とか5に下げると
エラーとなる頻度はかなり落ちます。
しかしそれでもたまにはやはりメモリ不足となってしまいます。
画像ファイルのサイズは
300x300 pixel程度で小さなファイルです。
メモリは32 GB積んでおり、タスクマネージャーを見ても
使用量は4 GB程度となっており、メモリは十分あります。
更に、プログラムはAny CPUで作成しており、64 bitで動作しているので、
2 GBの縛りもありません。
一体、なぜこのようなエラーが生じるのでしょうか?
|