我需要关闭此内存流吗?

问题描述 投票:3回答:1

我有这个代码有效:

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。那是对的吗?还是自动关闭?

c# asp.net-core asp.net-core-2.0
1个回答
4
投票

由于内存流封装在返回值中,因此不应将其丢弃。如果你这样做,它将在FileStreamResult可以访问它之前处理。

正如你在FileStreamResultExecutor.ExecuteAsync中看到的那样,流已经被置于the source方法内部。

ASP.NET MVC也是如此,FileStreamResult.WriteFile在哪里处理(source)。

© www.soinside.com 2019 - 2024. All rights reserved.