0

У меня есть простое веб-приложение VB.NET, которое позволяет пользователям загружать определенные файлы на жесткий диск сервера. Однако некоторые из этих файлов чрезвычайно велики, размером до 1 ГБ. Иногда, когда веб-приложение пытается отправить эти файлы, приложение захватывает и бросает System.OutOfMemoryException. После некоторых исследований я узнал, что это связано с фрагментацией памяти или недостаточно постоянной памяти для выделения всего файла.Как отправлять файлы, не беспокоясь о фрагментации памяти?

Есть ли вообще способ избежать этой ошибки? На нашем сервере достаточно физической памяти для размещения этих больших файлов, это просто проблема фрагментации памяти (из того, что я читал в Интернете в любом случае).

Для справки, вот код, который в настоящее время на месте:

Public Function SendFile(ByVal fileName As String, ByVal contentType As String, ByVal fileLocation As String) As ActionResult 
    Dim fileBytes as Byte() = New WebClient().DownloadData(fileLocation) 
    Return File(fileBytes, contentType, fileName) 
End Function 

... где fileName это имя файла, contentType типа MIME, и fileLocation является физическим расположением на диске.

Любые предложения?

+0

Загрузите его в куски через, скажем, «HttpWebRequest»? –

ответ

0

Это слишком долго для раздела комментариев, поэтому это ответ. Не помещаю никакого кода, хотя .. sry.

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

Сервер анализирует файл и определяет такие вещи, как, количество транзакций, необходимых для отправки файла в Z = (10mb - выделенное пространство). Он считывает файл из позиции x (0) в y (Z-1) и передает эти позиции в выделенном пространстве, отправляет chunk клиенту, продвигает x to = y + 1 и перезапускает цикл.

Клиент создает пустой файл на диске, запрашивает файл с сервера, получает патрон и записывает его на файл в положениях, которые содержатся в выделенном пространстве.

Смежные вопросы