OutOfMemoryExceptionについて調べていて気になったので質問します。http://msdn.microsoft.com/ja-jp/library/system.outofmemoryexception(VS.80).aspxを見ると「プログラムの実行を継続するためのメモリが不足している場合にスローされる例外。」との記述がありますが、これってどのような状況をさしているのでしょうか。例えば以下のようなコードを適当に実行するとExceptionが発生します。 StringBuilder test = new StringBuilder(); test.Append("");←適当に300文字くらい for (long i = 0; i < 100000000000; i++) { test.Append(test.ToString()); }実行環境 XP/SP2 メモリ2G実行前は使用メモリ500M程度、iが18になった時にExceptionが発生します。使用量は900M程度(タスクマネージャーにて確認)この時なぜ発生するのか、何の単位でこのメモリーが不足しているのかって分かるものでしょうか。因みにwindowsフォーム及びWebでも同様にエラーになります。今後プロジェクトでメモリを大量に使用するソースを書く為、どのような原因で発生するのか把握しておきたいのですが、ご教示よろしくお願いいたします。
れい様、なちゃ様ご回答ありがとうございます。 (れい様の発言より引用) >x86ならプロセスあたり2Gの制限があり、.NetやOSのDLLなどの分があるので >1GByteちょっとくらいしか使えません。 (なちゃ様の発言より引用) >もちろんアプリケーションそのものが全部使える訳ではなく、 >.NETアプリケーションの場合は目安として1GBくらいの感じです。 お二人とも、目安が1G程度とのことですが、この値は状況により変動したりはしないのでしょうか。 この1G程度の根拠となるページがあるのであれば教えていただければ幸いです。 (れい様の発言より引用) >> test.Append("");←適当に300文字くらい >適当じゃなくて一文字とか二文字とか、特定したほうが再現性がありますよ。 失礼しました。今は272文字でやっています。 WindowsフォームにてフォームのLoadイベントに最初のコードを記載したプロジェクトにて実験しています。 マサヤ様ご回答ありがとうございます。 MemoryFailPointはどの程度のメモリが確保できるかを検知するものだと認識しています。 例えばデータ量が可変の帳票を作成する時にかつ、サードパーティ製の製品等を使用した時に どの程度メモリが必要なのか分かるものなのでしょうか。
- Child Tree -