如何衡量Excel计算速度?
我正在开发Excel 2010应用程序 ,其中包含60多个工作表中的复杂计算。 当我改变任何单元格中的某些数据时,在后台计算中需要很多时间(我希望计算是自动的 )…..
- 有没有什么方法可以找出哪个配方需要更多的时间呢?
- 什么是更好的方法来提高性能 – 多个简单公式与单一复杂(MULTISTEP)公式?
即
[STEP-1] E1 = C1 * D1
[STEP-2] F1 = E1 / B1
[STEP-3] G1 = F1 + B1
要么
[SINGLE STEP] G1 = (C1 * D1 / B1) + A1
build议将不胜感激!
谢谢
至于第二部分,如果你使用普通的非易失性函数,那么多个简单的公式可能会更好,原因有两个:
- 对于简单的重新计算(无需重build依赖关系树),Excel将只计算实际更改的部分,例如,在单步示例中,如果
A1
值发生更改,则Excel将不得不重新计算括号(C1 * D1 / B1)
的expression式C1, D1, B1
的值不变。 当您用F1的引用replace该零件时,如果只有A1改变其值,F1的值将不会被重新计算。 - 如果您有多个核心,则可以更好地计算多个简单公式。
另一个有用的链接除了MSDN: http : //www.decisionmodels.com/calcsecretsc.htm
挥发性function在非常大的工作簿中是不利的,特别是OFFSET和INDIRECT。 每当文件发生任何更改时,都会重新计算它们,并且它们总是在单个线程中进行计算。 任何依赖于具有易失性函数的单元格的单元也会变得易失性,因为每次重新计算易失性函数时都必须重新计算所有依赖性。 大文件中的这种病毒波动会严重损害性能。 在这种情况下,使用许多简单的公式也是有帮助的,因为许多依赖关系可以保持非易失性。
从上面的链接:
某些Excelfunction不使用multithreading计算,例如:
数据表计算(但对表的结构化引用使用MTC)。 用户定义的函数(但XLL函数可以启用multithreading)。 XLMfunction。 使用格式2或地址选项的INDIRECT,CELL函数。 GETPIVOTDATA和引用数据透视表或多维数据集的其他函数。 Range.Calculate和Range.CalculateRowMajorOrder。 循环参考循环中的单元格。
曾几何时,我inheritance了一个大文件,花了30分钟在一台专用的快速机器上重新计算,这是由于疯狂使用OFFSETS来访问大数据表中的数据。 只需将计算逻辑从Excel移动到Access,并通过数据透视表导入结果,我将总计算时间缩短了几秒钟!
这可能有助于您的第一个问题http://msdn.microsoft.com/en-us/library/ff700515%28v=office.14%29.aspx虽然可以看到那里你的问题可能是接近脱离主题为要求一本书全面回答。 对于你的第二个问题,我猜测“没有明显的差别”。