我需要关闭这个内存流吗?

Gre*_*Gum 4 c# asp.net-core asp.net-core-2.0

我有这个有效的代码:

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;
}
Run Code Online (Sandbox Code Playgroud)

但是,在我看来,我需要以某种方式关闭或处理 memoryStream。那是对的吗?还是会自动关闭?

Pat*_*man 6

由于内存流被封装在返回值中,因此您不应对其进行处置。如果这样做,它将在FileStreamResult可以访问它之前被处理掉。

FileStreamResultExecutor.ExecuteAsync正如您在源代码中看到的那样,流已经在方法内部进行了处理。

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