2013-01-04 64 views
2

在我的ASP.NET MVC應用程序,我現在用的是NPOI框架來產生一個相當大的Excel文件(30-100mb)IIS內存使用產生大的文檔

http://npoi.codeplex.com/

後不會再回到正常

生成文檔後,我將它保存到一個MemoryStream,並通過使用MVC文件的輔助方法

File(Stream fileStream, string contentType, string fileDownloadName) 

這樣

返回FileStreamResult

可變文檔是從NPOI框架型「HSSFWorkbook」的

我不知道爲什麼內存使用率居高不下,已產生的文件後,也和流已返回給用戶。 在寫入響應流之後,File方法應該處理流。

如果我再次單擊生成鏈接,內存使用情況會恢復正常,並在文檔再次生成時開始爬升。

難道這是NPOI HSSFWorkbook類未被正確垃圾收集的問題嗎?這隻會是奇怪的,因爲我沒有保存任何靜態變量(至少不是在我的代碼中)。

有人知道爲什麼內存使用不會恢復正常嗎?

回答

5

處置!=釋放記憶。

垃圾收集器將根據需要釋放內存,而大塊可能需要比較小的時間更長的時間。

您在生成第二個文檔時看到的行爲肯定了我的建議;額外的內存使用會導致'內存壓力',這會觸發垃圾收集來清理事情。

基本上,除非你真的有一些內存問題,不要擔心。

1

你可能想看看調用GC.Collect()如果你遇到內存不足的情況。檢查這個SO線程是爲了解釋爲什麼(或者爲什麼不)調用它。

GC.Collect()

我不是說你應該,只是它可能是值得的測試。