生成大文档后,IIS内存使用无法恢复正常

本文关键字:恢复 内存 文档 IIS | 更新日期: 2023-09-27 17:50:50

. NET MVC应用程序我正在使用NPOI框架生成一个相当大的excel文件(30-100mb)

http://npoi.codeplex.com/

生成文档后,我将其保存到内存流中,并通过使用MVC文件助手方法返回FileStreamResult

File(Stream fileStream, string contentType, string fileDownloadName)
这样的

HSSFWorkbook document = GenerateExcelWorkBook();
var stream = new MemoryStream();
document.Write(stream);
stream.Flush();
stream.Position = 0;
return File(stream, "application/vnd.ms-exce", "filename.xls");

来自NPOI框架的变量文档类型为"HSSFWorkbook"

我不明白为什么内存使用率仍然很高,即使在文档已经生成,并且流已经返回给用户之后。File方法应该在写入响应流后处理该流。

如果我再次单击生成链接,内存使用将恢复正常,并在再次生成文档时开始攀升。

这可能是NPOI HSSFWorkbook类没有正确收集垃圾或其他东西的问题吗?这将是奇怪的,因为我没有保存任何静态变量(至少不是在我的代码无论如何)。

谁知道为什么内存使用不会恢复正常?

生成大文档后,IIS内存使用无法恢复正常

正在释放内存

垃圾收集器将根据需要释放内存,大块可能比小块需要更长的时间。

您在生成第二个文档时看到的行为证实了我的建议;额外的内存使用导致'内存压力',这会触发垃圾收集来清理东西。

基本上,除非你真的有内存问题,否则不要担心。

如果你遇到低内存的情况,你可能想看看调用GC.Collect()。查看这个SO线程,以获得为什么(或为什么不)调用它的一个很好的解释。

GC.Collect ()

我不是说你应该这样做,只是说它可能值得测试。