Цитата |
---|
Андрей VG написал: Excel использует многопоточные вычисления для расчётов формул. VBA же как был однопоточным, так и остался. Так что ваше замечание, в рамках темы не совсем корректно. |
Два разных несвязанных документа - без проблем, будут исполнятся в разных потоках. Но речь идёт у ТС про один проект, в котором изменение одной ячейки приводит к перерасчётам продолжительностью в несколько секунд.
Эксель банально пересчитывает таблицы данных одну за другой, хотя там-то уж можно было бы распараллелить работу, однако не получилось.
Потоки ещё могут использоваться при построении деревьев вычислений. Но для случая ТС уже вся эта работа выполнена, проект в активном актуальном состоянии. И после внесения изменений пользователем тупо начинается пересчёт всей цепочки. Возможно у ТС всё усугубляется неверной работой макросов - например запрещать и разрешать события надо всего один раз, избегая вложенностей.
Но на своих проектах, в оптимальности которых я уверен, я неоднократно видел, что когда эксель выполняет перерасчёты, грузится только одно ядро.
Более того, программируя на более других языках многопоточные приложения под Windows, я понимаю, почему это происходит именно так - трудно начать расчёт в параллельном потоке с середины вычислений не имея результата предыдущей части. Можно только что-то оптимизировать и подготовиться, но эта оптимизация выполняется в самом начале, и на десятый раз уже давно всё выоптимизировано...)