Обслуживание файла из действия в Asp.Net MVC. Лучше использовать byte [] или Stream? - PullRequest
2 голосов
/ 30 августа 2011

Когда мы хотим подать файл (не HTML) из действия, мы можем использовать Результат действия файла. Конструктор может принимать либо byte [], либо Stream. Какой из них лучше? Почему?

Спасибо!

Ответы [ 3 ]

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

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

Например, если файл находится на диске, вероятно, вы загрузите его в поток

var stream = File.OpeanRead("C:\myfile.ext")

Нет смысла превращать это в байтовый массив.

Однако, если у вас есть файл в памяти, он может быть уже в байтовом массиве. В этом случае нет смысла превращать его в поток.

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

Я бы использовал поток и очень старался бы передавать данные клиенту без загрузки всех данных в byte[] на веб-сервере.

ЭтоЕдинственный способ убедиться, что вы не загружаете файлы полностью в память сервера, представьте, что 10 человек загружают файлы по 100 МБ каждый, лучше избегать роста процесса ASP.NET до 1 ГБ ОЗУ только из-за этого, с потоковой передачей вы можете сделать это:)

1 голос
/ 30 августа 2011

Если ваш файл находится на диске, вы можете использовать FilePathResult: http://msdn.microsoft.com/en-us/library/system.web.mvc.filepathresult.aspx

Этот класс использует HttpResponse.TransmitFile, который читает файл без буферизации его в памяти: http://msdn.microsoft.com/en-us/library/system.web.httpresponse.transmitfile.aspx

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