首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >excel中的多线程计算速度慢

excel中的多线程计算速度慢
EN

Stack Overflow用户
提问于 2012-03-28 16:13:33
回答 2查看 19.5K关注 0票数 5

我想知道是否有任何方法可以控制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个小时,这就是为什么我热衷于找到一些方法来改进这一点。

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2012-03-28 18:36:25

http://www.decisionmodels.com/calcsecretsc.htm.

  • You可以使用像ExcelFunction(IsThreadSafe=true)这样的属性将-
  • 函数标记为线程安全的,尽管这听起来不像是瓶颈。这将允许对这些函数进行评估您的i7处理器具有超线程(因此它向Windows报告4个核心,但实际上只有两个实际核心),那么将Excel线程数设置为核心数(例如2)而不是处理器可以运行的线程数(这将是Excel默认值-可能是4)可能会更快。
票数 4
EN

Stack Overflow用户

发布于 2012-03-29 02:17:05

多线程计算比单线程计算慢是很不寻常的。

想必你已经将计算切换到了手动。

您是否在每个工作表上使用Sheet.Calculate来“按顺序计算工作表”?如果是这样的话,使用Application.Calculate可能会更快,让Excel自动计算出重新计算所有工作表的最快方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9903520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档