Нужно ли закрыть этот поток памяти? - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть этот код, который работает:

public async Task<IActionResult> OnGet()
{
    var workbook = GenerateClosedXMLWorkbook();
    MemoryStream memoryStream = new MemoryStream();
    workbook.SaveAs(memoryStream);
    memoryStream.Position = 0;
    return File(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "hello.xlsx");
    }


private XLWorkbook GenerateClosedXMLWorkbook()
{
    var workbook = new XLWorkbook();
    var worksheet = workbook.Worksheets.Add("Sample Sheet");
    worksheet.Cell("A1").Value = "Hello World!";
    worksheet.Cell("A2").FormulaA1 = "=MID(A1, 7, 5)";
    return workbook;
}

Однако мне кажется, что мне как-то нужно закрывать или утилизировать memoryStream. Это верно? Или он автоматически закрывается?

1 Ответ

0 голосов
/ 14 сентября 2018

Поскольку поток памяти инкапсулирован в возвращаемое значение, вы не должны его утилизировать.Если вы это сделаете, он будет удален до того, как FileStreamResult сможет получить к нему доступ.

Поток уже расположен внутри метода FileStreamResultExecutor.ExecuteAsync, как вы можете видеть в источнике .

То же самое верно для ASP.NET MVC, где FileStreamResult.WriteFile выполняет удаление ( source ).

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