C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 25 を表示中)
■11082 / )  Re[1]: VB.NET)四次元配列を用いての2点間距離計測
□投稿者/ PATIO (2回)-(2007/12/06(Thu) 16:19:44)
No11081 (Flowen さん) に返信
> 今回お尋ねしたいのは、4次元配列の宣言時にオーバーフローすることです。
>
> Dim maxX = Edgebmp.Width - 1 'X座標の最大値
> Dim maxY = Edgebmp.Height - 1 'Y座標の最大値
>       Dim D(maxX,maxY,maxX,maxY) As Double '----ここでオーバーフローエラーが発生----'


> エラーメッセージは
> 「'System.OutOfMemoryException'のハンドルされていない例外が.exeで発生しました」
> となります。
>
> 四次元の配列領域がでかすぎるのかと思い、条件わけをするなどして減らしたりしましたがうまくいきません。
> エラーを出さずに処理を行う方法、または四次元に代わる方法をご教授いただけないでしょうか?

えーと、実際に扱っている数値を使って試算してみましたか?
例えば、32×32ピクセルの画像を考えたとして単純に計算すると32×32×32×32×8となって8388608なんて数値に
これって8MBになっちゃいます。たった32ピクセル四方の画像で8MBです。
後は推して知るべしで画像が大きくなれば、途方も無い数値になるのは当たり前です。

で、本当に全ての計算結果を最後まで取っておく必要があるんでしょうか?
部分毎にやるとかできませんか?
もしくはファイルに書き出すとかもありえるでしょうけれど。
最近のPCがいくらメモリをたくさん載せているからと言っても一つのプロセスが使えるメモリの上限は決まってますし、
それでなくてもリソースと言うのは上限と言うのが存在します。
全部メモリに展開できれば楽なのは間違いない話ですが、現実には限られた範囲内でしか無理です。
少なくとも全てをメモリ上に展開するのは無理だと思うので処理方法を再検討された方が良いと思います。

返信 編集キー/


管理者用

- Child Tree -