Nano Hash - криптовалюты, майнинг, программирование

C # MSOffice Interop Word не убивает winword.exe

Я пишу приложение, которому нужен анализатор документов MSWord.

Я использую Microsoft.Office.Interop.Word.Document для извлечения текстов из документов, но даже если я использую doc.Close () документ, из taskManager я вижу, что winword.exe не убит, и после синтаксического анализа пара десятков документов съедает очень много ресурсов.

close () неправильный метод?

пожалуйста, помогите мне и укажите правильное направление, как правильно завершить эти процессы. знак равно

~~~ обновление ~~~

Спасибо за помощь. Я использую app.quit (), а также запускаю цикл, который проверяет процесс и решенную проблему! знак равно


  • Это побочный эффект работы сборщика мусора. Вероятно, вы не генерируете достаточно мусора, чтобы запустить сборку. В этом очень конкретном случае можно вызвать GC.Collect + GC.WaitForPendingFinalizers. 16.08.2011
  • @Hans Passant На самом деле не имеет ничего общего со сборщиком мусора. Он не называет правильный метод очистки. 16.08.2011

Ответы:


1

Вы вызываете Application.Quit, кроме того, поскольку вы выполняете Interop, возможно, стоит выпустить оболочка RCW.

Итак, в основном что-то вроде:

yourWordAppObject.Quit();
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(yourWordAppObject);

Обратите внимание, что некоторые люди используют: ReleaseComObject, но есть несколько потенциальных ловушек

15.08.2011

2

Вы должны выйти из экземпляра приложения с помощью app.quit (). Document.close () просто закроет документ. Я также предлагаю установить app.visible = true, когда вы закончите обработку, чтобы ваш пользователь мог закрыть его сам, если все остальное не помогло.

15.08.2011
  • Application.Quit на самом деле не завершает процесс, и при этом пользователь не закрывает окно. Word не может выйти, пока не будут освобождены все интерфейсы автоматизации. 16.08.2011
  • @Hans Passant Вот дерьмо, ты прав. Как мы это делаем? Особенно в тех случаях, когда вы хотите, чтобы документ был виден пользователю, а также закрывался им. 16.08.2011

  • 3

    После выполнения app.Quit () вы должны сделать app = null; По моему опыту, это предотвратит появление оставшихся процессов. Просто не забудьте также сделать app.Quit () и app = null в своем обработчике исключений.

    15.08.2011

    4

    Если вы хотите завершить процесс, вам нужно вызвать Quit для объекта Application - см. http://msdn.microsoft.com/en-us/library/microsoft.office.interop.word.applicationclass.quit%28v=office.14%29.aspx

    15.08.2011

    5

    Я думаю, что close просто обрабатывает документ, открытый внутри word. Помните, что в одном приложении можно открыть документ с более чем одним словом. Вы можете попробовать либо метод удаления, либо взглянуть на словесные объекты «методы выхода / выхода» (не могу вспомнить, что это было давно).

    15.08.2011
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..