我想知道是否有任何方法可以控制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,英特尔i7)上运行一个数据子集需要54.6秒。有趣的是,如果我关闭多线程,它需要25.8秒!更重要的是,如果我在一台超快的机器上运行它(2个英特尔至强X5570,四核“Nehalem”架构,64位和64位excel),它比我的笔记本电脑慢,多线程需要230秒,没有多线程需要26秒。
我想知道是否有更好的方法可以利用多核和多线程。较慢的部分似乎是excel重新计算,而不是插件速度。如有任何建议,欢迎光临。
编辑:上面的描述有点简化--实际上,我还有一个迭代的“计算/粘贴-值/重计算”过程,它在工作表4-10的每一个上运行(迭代进行,直到达到所需的灵敏度,然后才计算整个工作表)。我认为这使得在当前设计下运行wb计算是不可行的。
表4-10是相同的(除了硬编码的输入参数),并且彼此之间没有计算依赖性。如果每个程序的计算过程(上述迭代过程和工作表计算)可以并行进行,而不是顺序进行,我认为整个过程会快得多。
仅供参考,我已经执行了更明显的精简和测试(分解公式,分离易失性函数等)。
按原样运行我的整个数据集大约需要16个小时,这就是为什么我热衷于找到一些方法来改进这一点。
谢谢!
发布于 2012-03-28 18:36:25
http://www.decisionmodels.com/calcsecretsc.htm.
发布于 2012-03-29 02:17:05
多线程计算比单线程计算慢是很不寻常的。
想必你已经将计算切换到了手动。
您是否在每个工作表上使用Sheet.Calculate来“按顺序计算工作表”?如果是这样的话,使用Application.Calculate可能会更快,让Excel自动计算出重新计算所有工作表的最快方法。
https://stackoverflow.com/questions/9903520
复制相似问题