Excel性能提升


3

我有一台8 CPU 3GHz Windows机器,估计可以在16天内根据样本数据测试完成Excel计算。这种表现是不可接受的(!)。

计算不使用Excel的功能,但基本上是调用具有Calculator函数的COM对象的VBA脚本。

计算器进程使用25%的CPU,Excel使用1%。似乎没有使用交换内存。由于该过程是读写文本文件,我认为它与I / O相关。在计算过程中,I / O读/写计数不断计数。

已安装病毒检查程序,但未进行主动检查。即计算期间CPU为0%。

到目前为止,最好的建议是使用RAM磁盘。

您能否就性能瓶颈提出任何其他调查途径?

[后来...]

非常感谢下面的建议。基本上是计算器流程,是一个专门的财务计算器,但如下所述,它看起来像是通过COM使用它的瓶颈。此方法正在删除计算器提供的所有多线程功能,也可以作为Web服务进行寻址。

所涉及的真实场景是使用此新计算器进行的三年一次的财务表更新。遗憾的是,在性能评估的时间表中没有足够的时间预留,从而导致调查性能问题的紧迫性。由于此计算不是定期进行的,因此无需设置针对速度优化的环境。

废弃Excel并向计算器编写多线程调度程序的正确解决方案很明显,但我们目前正在寻找一些解决方法,我们可以在合理的时间内完成计算。


是否会增加所涉及流程的优先级(通过任务管理器)?
Matthew Lock 2010年

Answers:


4

您正在使用25%的CPU,因为COM对象是单线程的,并且不使用CPU的其他内核。如果不修改COM对象代码,则无法提高计算性能。

抱歉。


是否有助于创建COM对象/和Excel的多个实例,并希望系统在多个CPU上安排它?
Matthew Lock 2010年

我可以在它将工作的不同实例之间拆分数据集。
Ignacio Soler Garcia 2010年

1
@Matthew:如果你打算这样做,我认为你会更好地研究其他解决方案,比如正确的编程/计算环境(比如Wil建议的那样)
Josh Hunt 2010年

1
@joshhnut:stuart说Excel引擎(实际上是VBA引擎)只调用一个COM对象,因此用于执行调用的引擎非常无关紧要,因为计算是由COM对象完成的。请记住,VBA和VB6或多或少共享相同的引擎。
Ignacio Soler Garcia 2010年

9

简而言之,不要将Excel用于此类事情。您可以查看旨在卸载处理的Excel Services(SharePoint附加组件),但我没有使用它的经验。

如果你正在做一些复杂的事情,你真的想要研究可以扩展到多CPU环境的严肃的数学工具 - 但是,如果不知道你想要完成什么,我甚至不知道从哪里开始。

有些东西看包括SageMathMATLAB数学,其中包括MANY等。


1
+1 Matlab是一个很棒的工具,但许多通用编程语言也可能适合(并且可以免费使用)。此外,这里可能有很多CPU时间只是Excel刷新每一步后屏幕上显示的内容。
sblair 2010年

@sblair不能同意。首先想到的是当我实际看到这个问题时Python的交互式shell。
约翰T 2010年

4

要做的一件事可能是找到更好的方法来实现您的软件,使用更适合性能计算的工具,甚至是特定于您的问题域的语言/框架。许多工具都在那里,即Mathematica,SAS,R等等。此外,您应该尽可能并行化它。

另外,尽量避免使用磁盘。如果你要使用磁盘,除了RAM磁盘之外,你应该考虑使用像RAID 10这样的高性能raid阵列,或者更好的是使用由SSD组成的RAID 10。

您应该在运行过程中对流程进行概要分析,并查看系统时间和用户时间。我愿意打赌,大部分执行时间都在系统调用中占用,以执行所有磁盘I / O. 摆脱它。


0

你只需要任务管理器:

转到进程选项卡,然后选择菜单查看/选择列,并选中其中一个或全部:

  • CPU使用率(给出使用中CPU总量的百分比)
  • 内存 - 工作集(正在使用的内存)
  • I / O读取+ I / O写入(计算完成的磁盘访问总数)

然后,您可以在列上单击两次(而不是双击)以使其按值的降序排序,以检查是否过度使用。

但是,如果问题出在ActiveX对象中,那么优化Excel根本无济于事。


0

正如其他人所提到的,您应该调查将处理从Excel中移除。VBA和COM对象在执行大量来回操作时效率不高。

我个人倾向于将我的数据发送到SQL服务器并在那里编写查询。您的查询/过程可以执行其计算,并使用外部连接将输出提供给Excel。

RDBMS解决方案非常有效地完成了我从未想过要在Excel或VBA中尝试做的事情,可以轻松地使用多GB数据库以及尽可能多的线程。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.