生成大文档后,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类没有正确收集垃圾或其他东西的问题吗?这将是奇怪的,因为我没有保存任何静态变量(至少不是在我的代码无论如何)。
谁知道为什么内存使用不会恢复正常?
正在释放内存
垃圾收集器将根据需要释放内存,大块可能比小块需要更长的时间。
您在生成第二个文档时看到的行为证实了我的建议;额外的内存使用导致'内存压力',这会触发垃圾收集来清理东西。
基本上,除非你真的有内存问题,否则不要担心。
如果你遇到低内存的情况,你可能想看看调用GC.Collect()。查看这个SO线程,以获得为什么(或为什么不)调用它的一个很好的解释。
GC.Collect ()
我不是说你应该这样做,只是说它可能值得测试。