トップ回答者
Drawing.Graphic.DrawImageでOut Of MemoryExceptionが出る大きいイメージの条件

質問
-
他記事を参考にさせていただいております。.net 2.0 Win XP SP3(x86)上での結果で別OSでは試していませんが、
jpg画像ファイルをDrawing.Bitmapに読み込み、Graphic.DrawImageメソッドのパラメータに渡しています。渡すBitmapが大きいと(jpg9600x9600)だとOut Of MemoryException例外スローとなり描画できません。サイズ9200x9200だと描画できました。単純にwidth heightピクセル値でOut Of MemoryException境界値となるのか、マシンスペックなどにも左右されるのか、情報をいただけたら幸いです。
Graphic.DrawImageメソッドで例外catchすると、ex.Messageには「メモリ不足です」文字列がセットされましたが、これは何のメモリのことでしょうか?メインメモリ?グラフィックカードのメモリでしょうか?メインメモリは2GBくらいの空きメモリがあっても例外になりました。
以上、よろしくお願いいたします。
- 編集済み eiji_fukuda 2011年5月30日 7:33
回答
-
どこまでなら安全という境界はありません。
マシン環境、OS、実行(常駐)しているプロセスなどに依存します。すでにアドバイスあるところへの補足ですが、仮想メモリ空間は断片化します。
また、仮想メモリ空間はどれだけ物理メモリを増設しようと、32bit OS ではユーザが使える領域が MAX 2GB(実質 1.4GB あるかどうか)になります。
その中で、数百メガバイトの連続領域が空いていないこともあり得ますので、OutOfMemory となるのは仕方がないところかと思います。# 感覚的に DrawImage する際は、Bitmap と同じ領域かそれに近い領域のメモリ割り当てが発生すると思っています。
# 裏付けはありませんが。なので、300MB の連続した空き領域が 2 つぐらいいる計算でしょうか。
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。- 回答としてマーク 山本春海 2011年6月2日 8:25
すべての返信
-
どこまでなら安全という境界はありません。
マシン環境、OS、実行(常駐)しているプロセスなどに依存します。すでにアドバイスあるところへの補足ですが、仮想メモリ空間は断片化します。
また、仮想メモリ空間はどれだけ物理メモリを増設しようと、32bit OS ではユーザが使える領域が MAX 2GB(実質 1.4GB あるかどうか)になります。
その中で、数百メガバイトの連続領域が空いていないこともあり得ますので、OutOfMemory となるのは仕方がないところかと思います。# 感覚的に DrawImage する際は、Bitmap と同じ領域かそれに近い領域のメモリ割り当てが発生すると思っています。
# 裏付けはありませんが。なので、300MB の連続した空き領域が 2 つぐらいいる計算でしょうか。
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。- 回答としてマーク 山本春海 2011年6月2日 8:25