Почему я не должен использовать IFormFile для больших загрузок - PullRequest
0 голосов
/ 12 декабря 2018

Использование ядра .net 2.1

Согласно документации Microsoft , IFormFile должен использоваться для работы с небольшими загруженными файлами, тогда как MultipartReader должен использоваться для больших файлов.Достаточно справедливо.

Тем не менее, они также говорят,

Файлы, загруженные с использованием метода IFormFile, буферизуются в памяти или на диске на веб-сервере перед обработкой.Внутри метода действия содержимое IFormFile доступно в виде потока.

Итак, если большие файлы отправляются на диск и читаются в потоке, почему мы не должны всегда использовать IFormFile?Я не понимаю, почему MultipartReader все равно не загружает большие файлы в ОЗУ.

Может кто-нибудь объяснить, что мне здесь не хватает?

1 Ответ

0 голосов
/ 12 декабря 2018

В настройке IFormFile используется подход буферизации, который потребляет дисковое пространство или память.

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

См. примечание на этой же странице .

Любой отдельный буферизованный файл размером более 64 КБ будет перемещен из ОЗУ ввременный файл на диске на сервере.Ресурсы (диск, оперативная память), используемые для загрузки файлов, зависят от количества и размера одновременных загрузок файлов.Стриминг - это не столько перфоманс, сколько масштаб.Если вы попытаетесь буферизовать слишком много загрузок, ваш сайт потерпит крах, если на нем не хватит памяти или дискового пространства.


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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...