Все, что вам нужно сделать, это вернуть File
:
public IActionResult SampleFileReport()
{
// do stuff
return File(bytes, mimetype, filename);
}
File
также имеет перегрузки, которые принимают Stream
и string
(путь и имя файла к файлу в файловой системе) в дополнение к byte[]
. mimetype
- это ваш тип контента, например, application/pdf
, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
(Excel) и т. Д. Последний параметр filename
является необязательным. Если он предоставлен, заголовок Content-Disposition: attachment
отправляется с ответом, который предлагает браузеру открыть диалоговое окно загрузки. В противном случае используется значение по умолчанию Content-Disposition: inline
, и браузер будет пытаться загрузить возвращаемый файл непосредственно во вкладку / окно браузера, предполагая, что mime-тип поддерживается для нативного рендеринга браузера. Если нет, то вы получите диалог загрузки, независимо от того.
Короткий ответ на Ваш вопрос, я думаю, не (можно просто создать новый объект).
В этом примере я полагаю, что установка длины к 0 все еще оставляет все элементы для сборки "мусора".
Вы могли добавить это к Object.prototype, если бы это - что-то, что Вы часто использовали бы. Да это линейно в сложности, но что-либо, что не делает сборки "мусора" позже, будет.
Это - лучшее решение. Я знаю, что это не связано с Вашим вопросом - но как долго мы должны продолжить поддерживать IE6? Существует много кампаний для прерывания использования его.
Не стесняйтесь исправлять меня, если существует что-либо неправильное выше.
Таким образом резюмировать Ваш вопрос: Вы хотите избежать, как можно больше, проблемы с ошибкой IE6 GC. Та ошибка имеет две причины:
Решение вызвать 1, кажется: подавите количество выделений; присвойте новые объекты и строки как можно меньше.
Решение вызвать 2, кажется: сохраните количество, 'заглаживают' объекты; удалите свои строки и объекты, как только Вы больше не нуждаетесь в них и создаете их заново при необходимости.
До некоторой степени эти решения являются противоречащими: сохранять количество объектов в памяти низко повлечет за собой больше выделений и освобождения. С другой стороны постоянно многократное использование тех же объектов могло означать сохранять больше объектов в памяти, чем строго необходимый.
Теперь для Вашего вопроса. Сбросите ли Вы объект путем создания нового, или путем удаления всех его свойств: это будет зависеть от того, что Вы хотите сделать с ним впоследствии.
Вы, вероятно, захотите присвоить новые свойства ему:
Нет никакого быстрого, простого в использовании способа очистить объект JScript для повторного использования, как будто это был новый объект — не создавая новый. Что означает, что короткий ответ на Ваш вопрос является 'Нет', как jthompson говорит.