Долгосрочные макросы VBA прерываются svchost.exe - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть несколько макросов Excel VBA, которые работают часами. Макросы выполняют миллионы вызовов COM, чтобы получить некоторую информацию из приложения САПР, вычисляют некоторые числа, а затем другие миллионы вызовов СОМ в то же приложение САПР, чтобы создать несколько чертежей. Макросы записывают состояние и ход выполнения в текстовый файл каждую секунду.

У меня есть процесс Python, который проверяет, обновлялся ли файл прогресса за последние несколько секунд, и если это не так, он будет убить Excel и CAD и уведомить о сбое.

Проблема в том, что каждые 10 или 20 минут я вижу процесс svchost.exe в диспетчере задач, который занимает 100% ядра в течение нескольких секунд, Excel Загрузка ЦП снижается до нуля, и большинство (не все) приложения перестают отвечать на запросы. Когда svchost.exe возвращается к 0%, Excel возобновляет работу и продолжает свою работу.

Все работало хорошо годами, но недавно мы начали работать с большими чертежами, и svchost.exe начал держать Excel в заложниках для дольше и дольше.

Я увеличил тайм-аут с 20 секунд до 40, затем до 60. Но у меня было несколько случаев, когда svchost.exe требуется больше минуты, чтобы сделать то, что он делает.

Если я щелкну правой кнопкой мыши по процессу svchost.exe в диспетчере задач, а затем в «go to services», я увижу две выделенные службы: «RP C Endpoint Mapper» и «Удаленный вызов процедур (RP * 1023»). *) ".

Я пытался добавить 3-секундную паузу каждые 10 секунд, надеясь, что svchost.exe будет использовать свободное время, но это не помогло.

паузы появляются в случайные моменты времени, обычно, когда Excel загружает данные в большую коллекцию, иногда в 2 или 3 раза, когда коллекция увеличивается в размере или когда большая коллекция выходит из scope.

Мне не нравится увеличивать время ожидания, не зная причину и что является хорошим значением.

Есть ли способ избежать этих длинных пауз?

1 Ответ

0 голосов
/ 18 февраля 2020

Это хорошее время для рассмотрения ограничений использования Excel для длительных процессов.

Не видя код, все, что я могу сделать, - это предположить, что в обработке вызовов COM есть утечка памяти. Возможно, объекты не удаляются должным образом даже с помощью Set = Nothing?

Не могли бы вы переписать процедуры в Python или VB. Net и воспользоваться преимуществами более эффективных средств устранения неполадок / разработки приложений? ?

Мне кажется, что svchost.exe не имеет ничего общего с cra sh, это может быть репрезентативным или симптоматичным c для интерфейсов DLL COM-объекта? Но точно не знаю, не зная, какие библиотеки и объекты используются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...