ASP.NET MVCアプリケーションでは、NPOIフレームワークを使用して、かなり大きなExcelファイル(30〜100 MB)を生成しています。
ドキュメントを生成した後、それをメモリストリームに保存し、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クラスがガベージコレクションされていないなどの問題でしょうか?私は静的変数を保存していないので、それは奇妙なことです(少なくとも私のコードにはありません)。
メモリ使用量が通常に戻らない理由を誰かが知っていますか?