Мне интересно, есть ли способ контролировать вычисления Excel, чтобы несколько листов в ББ пересчитывались параллельно, а другие нет. Моя проблема в том, что при текущей настройке процесс последовательного расчета, который у меня есть, занимает слишком много времени. Последовательность запускается из VBA и выглядит примерно так:
1) vba вызывает надстройку (надстройка excel-dna vb.net, которая управляет устройством чтения данных и прикрепленной базой данных)
2) addin возвращает данные на лист 1. Листы 2-3 пересчитываются в последовательности (лист 2, затем 3)
3) листы с 4 по 10 пересчитываются по порядку, но поскольку каждый из них независимо ссылается только на лист 2, теоретически они могут пересчитывать параллельно - верно? Но как это сделать?
4) начать процесс заново с вызова новых данных через vba addin, описанный в 1)
Выполнение подмножества данных на моем ноутбуке (64-битная с 32-битной Excel, Intel i7) занимает 54,6 секунды. Интересно, что если я отключу многопоточность, это займет 25,8 секунды! Более того, если я запускаю его на супербыстрой машине (2 x Intel Xeon X5570, четырехъядерная архитектура Nehalem, 64-битная с 64-битной Excel), это медленнее, чем у моего ноутбука, занимает 230 секунд с многопоточностью или 26 секунд без.
Интересно, есть ли способ лучше использовать несколько ядер и многопоточность. Медленный бит, кажется, лучше пересчитывает, чем скорость добавления. Любые предложения приветствуются.
редактирование:
Вышеприведенное описание немного упрощает: на самом деле у меня также есть итеративный процесс calc / paste-vales / recalc, который выполняется на каждом из листов 4-10 (итерация продолжается до тех пор, пока не будет достигнута требуемая чувствительность, и только затем рассчитывается полный лист). Я полагаю, что это делает невозможным выполнение расчета wb при текущем дизайне.
Листы 4-10 идентичны (за исключением жестко заданных входных параметров) и не имеют расчетных зависимостей друг от друга. Если бы процесс вычисления (упомянутая процедура итерации и калькуляция листа) каждого из них мог бы быть выполнен параллельно, а не последовательно, я думаю, что весь процесс был бы намного быстрее.
К вашему сведению, я уже выполнил более очевидную оптимизацию и тестирование (разбиение формул, разделение изменчивых функций и т. Д.).
Выполнение всего набора данных в течение всего процесса занимает около 16 часов, поэтому я стремлюсь найти способы улучшить это.
Спасибо!