Отправка большого файла по исключению веб-службы и OOM - PullRequest
1 голос
/ 21 мая 2010

У меня есть веб-сервис, с методом:

[WebMethod]
public byte[] GetFile(string FName)
{
    System.IO.FileStream fs1 = null;
                fs1 = System.IO.File.Open(FName, FileMode.Open, FileAccess.Read);
    byte[] b1 = new byte[fs1.Length];
    fs1.Read(b1, 0, (int)fs1.Length);
    fs1.Close();
    return b1; 
}

и он работает с маленьким файлом, например 1 МБ, но когда дело доходит до файла фотошопа (около 1,5 ГБ), я получаю:

System.OutOfMemoryException

в этой строке:

Byte[] img = new Byte[fs.Length];

Идея в том, что у меня есть приложение winforms, которое получает этот файл и сохраняет его на локальном диске.

1 Ответ

2 голосов
/ 21 мая 2010

Все зависит от того, куда выдается исключение. Скорее всего, происходит то, что файл такого размера попадает в кучу больших объектов (LOH), и фрагментация памяти вызывает эту проблему.

http://msdn.microsoft.com/en-us/magazine/cc534993.aspx

http://blogs.msdn.com/maoni/archive/2006/04/18/large-object-heap.aspx

http://blogs.msdn.com/webtopics/archive/2009/05/22/Troubleshooting-System.OutOfMemoryExceptions-in-ASP.NET.aspx

Ссылка на похожий вопрос:
Как я могу заставить .NET агрессивно собирать мусор?

...