

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+で汎用エラー」といった例外が続発してしまうことです。マネージコードなのでリソースは自動的に解放されると思うのですが、それでも間に合わないのでしょうか?何か対処方法があれば、ご教示ください。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
>リソースは自動的に解放されると思うのですが
この文章に引っかかりました。
Cでは確保したメモリーは自動開放はしないと記憶しています。
bmpを開放してみてください。
有難うございます。
自己解決しました。
画像を一枚処理するごとに、下のPumpMesage()を実行したら、例外が発生しなくなりました。
やはり、リソース開放がOSに伝わるのに時間が掛っていたのが原因かと思っています。
なお、マネージコードなのでbmpの解放を明示的に行うことはできないのではないでしょうか。
#pragma comment(lib, "User32.lib")
void PumpMessage()
{
MSG msg;
while( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) ){
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
No.1
- 回答日時:
マニュアルより
http://msdn.microsoft.com/ja-jp/library/stf701f5 …
> 例外
> OutOfMemoryException
> ファイルのイメージ形式が有効ではありません。
> または
> GDI+ はファイルのピクセル形式をサポートしません。
> 解説
> ファイルのイメージ形式が有効でない場合、または、そのファイルのピクセル形式が GDI+ でサポートされていない場合、このメソッドは OutOfMemoryException 例外をスローします。
これに該当していませんか?
早速のアドバイス有難うございます。
私もそう考え、例外を起こす画像のみを集めて処理したところ、件数が少なければ例外が発生しませんでした。どうも数万件を処理した場合に、特に後半で例外が続発するので、何かリソースに関係しているのではないかと思い、今回の質問をしました。
それに、ひとつよく分からないのが、ご指摘の「形式がサポートされてない」とOutOfMemoryという言葉の関係です。形式がサポートされていならTypeNotSupportedとかを使えば良いのにと思いますが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/09 10:33
- Perl RSSにdiv,ul classを付けたいのですがどのようにつけるのかわからないです 2 2022/03/28 01:53
- その他(プログラミング・Web制作) pythonのグローバル変数 2 2022/11/25 18:02
- その他(プログラミング・Web制作) pythonで、tkinterとpillowの組み合わせ 2 2022/08/16 17:42
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- Excel(エクセル) EXCELのグラフを画像(JPG形式)で保存、通常実行がうまく行かない。ステップインはうまく行く 3 2022/08/30 12:06
- HTML・CSS ブロックエディターで作りつつ、画像を挿入しつつ、画像にスタイルシートのコードを付ける方法はありますか 1 2022/08/23 18:46
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/10 11:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
グローバル変数のよくない使い...
-
CSVファイルへの保存の際、デー...
-
VBに、Cのincludeのようなもの...
-
最近使ったファイルからファイ...
-
ExcelVBA 定数宣言を外部ファイ...
-
csvファイルを開かずに文字を検...
-
ファイルの結合
-
Wordファイルの結合
-
simplexml_load_fileのタイムア...
-
COM相互運用機能のON,OFFによる...
-
ファイル読み書き方法について...
-
VBAにてEXCEL以外のファイル(テ...
-
バッチで118項目のCSVを処理し...
-
分割コンパイルの#defineについて
-
SGファイルって何ですか?
-
文書から任意の文字を抽出する...
-
fopenの"r+"モードで同時に読み...
-
VB.NETによるプロセス間通信
-
C言語でファイル内の一致検索
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
dataファイルをxtxファイルにす...
-
csvファイルを開かずに文字を検...
-
ファイル名の先頭にアンダース...
-
CSVファイルへの保存の際、デー...
-
グローバル変数のよくない使い...
-
バッチで118項目のCSVを処理し...
-
テキストファイルの最終行を削...
-
VBAにてEXCEL以外のファイル(テ...
-
VBに、Cのincludeのようなもの...
-
分割コンパイルの#defineについて
-
RPGでファイル名(もしくはレコ...
-
SGファイルって何ですか?
-
マウスポインタの変更
-
Excelマクロでの再読込み方法
-
【C#】リソースファイルの埋め...
-
ダイアログボックスで複数フォ...
-
C言語のfopenについて教えてく...
-
ドラッグアンドドロップでファ...
-
「VBScript」ADODB.Streamにお...
おすすめ情報