(帖子中有一些后续内容(尚无答案):https : //stackoverflow.com/q/6197829/314661)
使用以下代码
Application app = new Application(); _Document doc = app.Documents.Open("myDocPath.docx", false, false, false); doc.PrintOut(false); doc.Close();
我正在尝试以编程方式打开和打印文件。
问题是每次我运行上面的代码时,都会启动一个新的WINWORD.exe进程,显然这会很快耗尽所有内存。
应用程序类似乎不包含dispose / close或类似方法。
经过一些研究,我(意识到)并将代码更改为以下代码。
Application app = new Application(); _Document doc = app.Documents.Open(fullFilePath + ".doc", false, false, false); doc.PrintOut(false); doc.Close(); int res = System.Runtime.InteropServices.Marshal.ReleaseComObject(doc); int res1 = System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
而且我可以看到剩余的参考计数为零,但过程仍然存在吗?
PS:我正在使用Microsoft.Office.Interop库的版本14。
也许尝试设置doc = null并致电GC.Collect()
doc = null
GC.Collect()
编辑,不是我自己的代码,我忘了我从哪里得到的,但这是我用来处理Excel的东西,它可以完成工作,也许您可以从中收集一些信息:
public void DisposeExcelInstance() { app.DisplayAlerts = false; workBook.Close(null, null, null); app.Workbooks.Close(); app.Quit(); if (workSheet != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(workSheet); if (workBook != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(workBook); if (app != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(app); workSheet = null; workBook = null; app = null; GC.Collect(); // force final cleanup! }