Как быстро очистить Объект JavaScript?

Все, что вам нужно сделать, это вернуть 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-тип поддерживается для нативного рендеринга браузера. Если нет, то вы получите диалог загрузки, независимо от того.

159
задан tanguy_k 30 January 2018 в 17:24
поделиться

2 ответа

Короткий ответ на Ваш вопрос, я думаю, не (можно просто создать новый объект).

  1. В этом примере я полагаю, что установка длины к 0 все еще оставляет все элементы для сборки "мусора".

  2. Вы могли добавить это к Object.prototype, если бы это - что-то, что Вы часто использовали бы. Да это линейно в сложности, но что-либо, что не делает сборки "мусора" позже, будет.

  3. Это - лучшее решение. Я знаю, что это не связано с Вашим вопросом - но как долго мы должны продолжить поддерживать IE6? Существует много кампаний для прерывания использования его.

Не стесняйтесь исправлять меня, если существует что-либо неправильное выше.

50
ответ дан Seb 23 November 2019 в 21:37
поделиться

Таким образом резюмировать Ваш вопрос: Вы хотите избежать, как можно больше, проблемы с ошибкой IE6 GC. Та ошибка имеет две причины:

  1. Сборка "мусора" происходит один раз в такое количество выделений; поэтому, больше выделений, которые Вы делаете, чаще GC, будет работать;
  2. Больше объектов, которые Вы имеете ‘в воздухе’, больше времени каждая выполненная Сборка "мусора" берет (так как это проверит через весь список объектов видеть, которые отмечены как мусор).

Решение вызвать 1, кажется: подавите количество выделений; присвойте новые объекты и строки как можно меньше.

Решение вызвать 2, кажется: сохраните количество, 'заглаживают' объекты; удалите свои строки и объекты, как только Вы больше не нуждаетесь в них и создаете их заново при необходимости.

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


Теперь для Вашего вопроса. Сбросите ли Вы объект путем создания нового, или путем удаления всех его свойств: это будет зависеть от того, что Вы хотите сделать с ним впоследствии.

Вы, вероятно, захотите присвоить новые свойства ему:

  • Если Вы делаете так сразу, то я предлагаю присвоить новые свойства сразу, и удаление пропуска или очистку сначала. (Удостоверьтесь, что все свойства или перезаписаны или удалены, хотя!)
  • Если объект не будет сразу использоваться, но будет повторно заполнен на некотором более позднем этапе, то я предлагаю удалить его или присвоить его пустой, и создаю новый позже.

Нет никакого быстрого, простого в использовании способа очистить объект JScript для повторного использования, как будто это был новый объект — не создавая новый. Что означает, что короткий ответ на Ваш вопрос является 'Нет', как jthompson говорит.

7
ответ дан Martijn 23 November 2019 в 21:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: