- - PR -
OutOfMemoryExceptionの対策について
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-05-16 12:32
仮想メモリが無いか非常に小さい、とかいうオチはさすがにないですよね。
_________________ 囚人のジレンマな日々 | ||||
|
投稿日時: 2006-05-16 12:58
その場合は、Windows 2000 側からも悲鳴があがるはずです。(;^-^) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-05-16 13:11
500MBというのは物理メモリですよね? 物理メモリ容量に関係なく、32bit系OSでプロセスが使用可能な 仮想メモリ空間は 2GB となります。 この 4GT RAM チューニングは、Windows2000, Windows XP, Windows Server 2003等の 32bit NT系OSで有効です。 なお、GCを行っていてもメモリ使用量が増えるというのは、何とも言えませんが、 アンマネージヒープがどこかで使われているのでは。 | ||||
|
投稿日時: 2006-05-16 15:29
ちょっと質問ですが、データは正しいですか?
間違いなくちゃんと改行が入っていますか? また、一行は大体どれくらいの長さで、どれくらいの項目数でしょうか? | ||||
|
投稿日時: 2006-05-16 16:22
サイズの問題上、確認できませんがデータは正しいと思います。
改行の点も同様です。 データに関しては、1レコード、54項目で300byte程度です。 | ||||
|
投稿日時: 2006-05-16 16:32
一傍観者ですが、不思議ですね。単にテキストファイルを1行ごとに読んでフィルター処理してテキストファイルを書き出すだけなのですよね。こんな単純なことでメモリー不足のエラーになっていたら、巷の大抵のアプリケーションがこのエラーに遭遇してしまいそうです。 つぎの点を確認されてはどうでしょうか。 ・読み込むファイルを本番データーではない、単純なテキストファイルにして試してみる。サイズは本番と同じだけど単に "ABCDEFGHI..." が何万行もあるような内容のテストデーターをなんらかの方法で作り出して使う。 ・問題のプログラムの部分だけを切り出して単体の Windows アプリケーションとして実行してみる。今は Web アプリケーションなどではないのでしょうか?再現できるプログラムを提示されれば他のかたも手近な環境で試せますし。 ・ファイルを読むだけにして、書くのをやめてみる。 ・その他、ウィルス対策ソフトウェアなどを疑ってみる? -- unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86} | ||||
|
投稿日時: 2006-05-16 17:30
unibonさん、ありがとうございます。
>・読み込むファイルを本番データーではない、単純なテキストファイルにして試してみる。サイズは本番と同じだけど単に "ABCDEFGHI..." が何万行もあるような内容のテストデーターをなんらかの方法で作り出して使う。 試してみます。 >・問題のプログラムの部分だけを切り出して単体の Windows アプリケーションとして実行してみる。今は Web アプリケーションなどではないのでしょうか?再現できるプログラムを提示されれば他のかたも手近な環境で試せますし。 元からWindowsアプリです。 >・ファイルを読むだけにして、書くのをやめてみる。 間違っておりました、読み込みではなく書き込み時にエラーが発生していました。 以下の何百万レコードのループ処理で発生しています。 sw.Write(strLine) sw.Write(vbCr + vbLf) | ||||
|
投稿日時: 2006-05-16 17:45
StreamReader/StreamWriterのバッファは指定しない限り、
1024+4096byte以上使用されることはなく適宜Flushされます。 明示的にFlushされるまですべてを保持しているわけではありません。 なので、これらのクラスが原因とは考えにくいです。 試しに4GBのファイルを作成し、Read/ReadLine,Write/WriteLineを 色々と組み合わせてみましたが、読み書き共に問題なく動作しました。 例外情報を編集せずに提示してみては? ちなみに追いつく追いつかないとはどういう意味なのでしょうか? GC中は他スレッドは停止すると認識してるんですが・・・ |