(В некотором роде продолжение сообщения (которое остается без ответа): 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: Я использую версию 14 библиотеки Microsoft.Office.Interop.
Согласованный с другими плакатами, что GC.Collect()
и Marshal.ReleaseComObject()
не нужно. Если процесс все еще существует после выполнения app.Quit(false)
, это могло бы быть, потому что Вы запускаете невидимое приложение, и существует подсказка, которая препятствует тому, чтобы приложение закрылось, такие как диалоговое окно Восстановления Документа. Если это так, необходимо добавить это при создавании приложения.
app.DisplayAlerts = false;