【发布时间】:2023-04-04 14:12:02
【问题描述】:
我想知道是否有任何方法可以控制 excel 计算,以便并行重新计算 WB 中的多个工作表,而其他工作表则没有。我的问题是,在当前设置下,我拥有的顺序计算过程花费了太长时间。该序列由 VBA 驱动,如下所示: 1)vba调用插件(excel-dna vb.net插件,控制数据读取器和附加数据库) 2)插件将数据返回到表1。表2-3按顺序重新计算(表2,然后3) 3) 第 4 到第 10 页按顺序重新计算,但由于每个独立地只链接到第 2 页,理论上它们可以并行重新计算 - 对吧?但是如何做到这一点? 4) 再次开始处理,通过 1) 中描述的 vba 插件调用新数据
在我的笔记本电脑(64 位和 32 位 excel,intel i7)上运行数据子集需要 54.6 秒。有趣的是,如果我关闭多线程,它需要 25.8 秒!更重要的是,如果我在超快机器上运行它(2 x Intel Xeon X5570,四核“Nehalem”架构,64 位和 64 位 excel),它比我的笔记本电脑慢,多线程需要 230 秒或没有多线程需要 26 秒。
我想知道是否有更好的方法可以利用多核和多线程。缓慢的一点似乎是 excel 重新计算而不是插件速度。任何建议表示赞赏。
编辑: 上面的描述有点简化——实际上,我还有一个迭代的“计算/粘贴-vales/重新计算”过程,它在 4-10 的每张纸上运行(迭代继续进行,直到达到一些所需的灵敏度,并且只有然后是计算完整的工作表)。我相信这使得在当前设计下运行 wb 计算不可行。
表 4-10 是相同的(硬编码输入参数除外),并且彼此之间没有计算依赖关系。如果每个计算过程(提到的迭代过程和工作表计算)可以并行而不是顺序完成,我认为整个过程会快得多。
仅供参考,我已经进行了更明显的简化和测试(分解公式、分离 volatile 函数等)。
在整个过程中运行我的整个数据集大约需要 16 个小时,这就是为什么我渴望找到一些方法来改进这一点。
谢谢!
【问题讨论】:
标签: multithreading performance excel architecture