- 締切済み
画像読み込み時のOutOfMemory
VC++2010ExpressのWindows Applicationで画像のサムネールを作るプログラムを作っています。 概略、つぎの様なコーディングです(細部は気にしないで下さい)。 for filePath in dlg->Files{ try{ String^ FileName = Path::GetFileName(filePath); Image^ img = Image::FromFiles(filePath); Bitmap^ bmp = gcnew Bitmap(Image, 48, 48); bmp->Save(FolderPath + "\\Thumbnails\\" + FileName); } chactch(System::Exception^ err){ Debug::Print("{0}", err->Massages); } } 問題は、数万件の画像を処理したときに、数千件までは順調に処理が進むのに、そのあと「OutofMemory」とか「メモリー不足」とか「GDI+で汎用エラー」といった例外が続発してしまうことです。マネージコードなのでリソースは自動的に解放されると思うのですが、それでも間に合わないのでしょうか?何か対処方法があれば、ご教示ください。
- みんなの回答 (2)
- 専門家の回答
お礼
有難うございます。 自己解決しました。 画像を一枚処理するごとに、下のPumpMesage()を実行したら、例外が発生しなくなりました。 やはり、リソース開放がOSに伝わるのに時間が掛っていたのが原因かと思っています。 なお、マネージコードなのでbmpの解放を明示的に行うことはできないのではないでしょうか。 #pragma comment(lib, "User32.lib") void PumpMessage() { MSG msg; while( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) ){ TranslateMessage( &msg ); DispatchMessage( &msg ); } }