2017-10-25 6 views
0

大きなファイルをWebアプリケーションからアップロードし、後で処理するためのメモリストリームにしようとしています。 HttpPostedFileBaseの入力ストリームを新しいMemoryStreamにコピーしようとしたときにOutOfMemory例外を受け取りました。MemoryStream - 空き領域を割り当てようとしたときのOutOfMemoryException

MemoryStream memStream = new MemoryStream(935700000); 

でもこれを行うことでSystem.OutOfMemoryExceptionに、その結​​果:トラブルシューティング時には、私はそうは次のようにだけ、のInputStream(935638275)の長さ(約)新しいのMemoryStreamを作成し、同じ量の空間を割り当ててみましたこの行

私はわずかにMemoryStreamsを理解していますが、これはMemoryStreamsがデータをどのようにバッファリングするかと関係しているようです。あまりにも大騒ぎすることなく、すべてのデータを1つのMemoryStreamにまとめる方法はありますか?

+0

なぜメモリストリームですか?後でそれを処理する場合は、一時フォルダにコピーしないでください。このような大きなデータをメモリに格納すると(ファイルに800MBのメモリを割り当てることになります)、私の意見では良い設計の決定ではなく、犯罪ではありません。 –

+0

このような大きな連続したメモリのチャンクを割り当てることは、ジッタ強制を削除した場合にのみ実行できます。プロジェクト>プロパティ>ビルドタブを選択し、「32ビット優先」チェックボックスをオフにします。 –

答えて

1

処理には何が含まれているのかわかりませんが、HttpPostedFileBaseにはすでにデータが含まれているストリームが含まれています。そのストリームを使用して、必要な処理を行うことができます。

実際にストリームを前後に移動する必要があり、入力ストリームがシーク/位置決めをサポートしていない場合は、データを一時的なローカルファイルにストリームしてからファイルストリームを使用することができますそのファイルに対して処理を行います。

多くの人があなたのWebアプリケーションをアップロードすると、指定した配列のサイズはMemoryStreamを使用してすばやくすべてのメモリを使い果たします。

関連する問題