У меня есть несколько макросов 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.
Мне не нравится увеличивать время ожидания, не зная причину и что является хорошим значением.
Есть ли способ избежать этих длинных пауз?