Microsoft Office Interop を使用して、Word および PDF ドキュメントを生成しています。ドキュメント生成の要求を一定数送信すると、Microsoft.Office.Interop.Word.Application
は動作/応答を停止します。
タスク マネージャーを見ると、winword.exe
プロセスが約 63000K のメモリを消費したときにこれが発生することがわかります [スナップショットを見てください]。ドキュメント生成のリクエストごとに、メモリ消費量が約 400 ~ 800K 増加し、約 63000K に達すると動作しなくなることに気付きました。最初のリクエストが受信されるwinword.exe
と、約 20000K のメモリ消費が始まります。
これは、ドキュメントの生成に使用されるコードです。
object templateName = "d:\\xyz.dotm";
object missing = System.Reflection.Missing.Value;
wordDocument = this.WordApplication.Documents.Add(ref missing, ref missing, ref missing, ref missing);
wordDocument.Range(ref missing, ref missing).Text = "";
wordDocument.set_AttachedTemplate(ref templateName);
wordDocument = this.WordApplication.Documents.Open(
ref objSourceFilePath, ref oFalse, ref oTrue,
ref oMissing, ref oMissing, ref oMissing,
ref oMissing, ref oMissing, ref oMissing,
ref oMissing, ref oMissing, ref oMissing,
ref oMissing, ref oMissing, ref oMissing,
ref oMissing);
wordDocument.ExportAsFixedFormat(
strTargetPath,
targetFormat,
paramOpenAfterExport,
paramExportOptimizeFor,
paramExportRange,
paramStartPage,
paramEndPage,
paramExportItem,
paramIncludeDocProps,
paramKeepIRM,
paramCreateBookmarks,
paramDocStructureTags,
paramBitmapMissingFonts,
paramUseISO19005_1,
ref oMissing);
finally
{
if (wordDocument != null)
{
wordDocument.Close(ref oFalse, ref oMissing, ref oMissing);
Marshal.FinalReleaseComObject(wordDocument);
wordDocument = null;
}
}
WordApplication
クラスは ApplicationPool 内に保存され、その後の要求処理に使用されるため、クラスを破棄したり解放したりしません。
メモリ消費量が増加し続け、その後応答を停止する理由について、誰かがヘルプ/ポインタを提供できますか?