Исключение из-за недостатка памяти при записи большого файла (300 МБ) в поток памяти - PullRequest
1 голос
/ 26 августа 2011

При использовании Http.Post большого файла я получаю исключение нехватки памяти.Я получаю это исключение, когда пытаюсь записать данные файлового потока в поток памяти.

Ответы [ 3 ]

2 голосов
/ 26 августа 2011

Очевидно, что помещение 300 МБ данных в память приводит к тому, что CLR достигает своего максимального объема памяти. Рассматривали ли вы запись файла в какой-либо другой поток, чтобы избежать одновременного хранения всего этого в памяти? Возможно, вы могли бы записать файл непосредственно на диск, а затем обработать его порциями, а не загружать все это в память одновременно.

1 голос
/ 02 ноября 2011

Ни один из приведенных выше ответов не работает для меня, этот выполняет свою работу:

http://blogs.msdn.com/b/johan/archive/2006/11/15/are-you-getting-outofmemoryexceptions-when-uploading-large-files.aspx

Эти строки являются ключевыми:

    HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(yourUri);
    wr.KeepAlive = false;
    wr.Timeout = System.Threading.Timeout.Infinite;
    wr.ProtocolVersion = HttpVersion.Version10;

И здесь:

wr.AllowWriteStreamBuffering = false;

Надеюсь, это поможет кому-то там.

0 голосов
/ 29 августа 2011

Установить HttpWebRequest.AllowWriteStreamBuffering = false.Это заставит HWR отправлять данные немедленно, а не буферизировать их в памяти.

...