Out Of Memoryの対処方法


シー  2009-04-07 18:34:42  No: 141811

WindowsXP
VB.NET2003で開発しています。

構造体の配列に、ループで複数のデータを読込んで集計をするアプリですが、
行数が数百万行になるデータのため、多くのメモリを消費します。

このPCには3Gのメモリを搭載していますが、
タスクマネージャで監視していると、
このアプリのプロセスのメモリ使用量が1G程度になったところで、
OutOfMemoryが発生します。

1つのアプリで使用できるメモリ量に制限などがあるのでしょうか?
あるとしたら、多くのメモリを割り当てる方法は無いのでしょうか?

宜しくお願い致します。


オショウ  2009-04-07 19:25:24  No: 141812

方法はありますが・・・

そういう場合にこそ、データベース使う手は無いので
しょうか?

構造体と言うことは、データの形式が一様で、ただ単
に大量に(数百万件)あると言うことのみ。

DBであれば、HDDの空き容量MAXまででも可能〜

※  元データは?
    CSVとか、バイナリファイルとか?

    私は計測データで1億個とか・・・やってますので
    統計する以前に搭載メモリではどうしようもない。

    バイナリファイルに逐次保存しながら、DBに保存
    しなおして統計・集計してます。

※  計算やベクトルに特化したDBエンジンもあります
    探してみては?

以上。参考まで。


シー  2009-04-08 00:48:46  No: 141813

>オショウ様
ありがとうございます。

元データ自体は小さなxlsファイルで、
アプリの処理により変数が膨らんでいく形です。

DBも検討しましたが、処理速度が重要になるため、
現状、メモリ上で処理しています。
DBの使用は、最終手段と考えております。

自分なりにもう少し色々と検討してみたいと思います。


オショウ  2009-04-08 07:20:25  No: 141814

アプリに割り当てられるメモリ量は調整できますが・・・
一体上限はどの程度と見積もっているのでしょうか?

32ビットOSの場合、上限3GBですので、それ以上となると
64ビットOSに変更した方が、よいかと・・・

※  VirtualAllocとか・・・
    Virtual.....というAPIを調べてみて下さい。
    仮想メモリからメモリ予約して使えます。
    が、VB.NETとなるとちょっと厄介?
    使って使えないことないですが・・・

以上。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加