1

我被要求调整每次打开工作表时加载的特定函数的性能(因此重要的是它不会使事情变慢)。似乎使这个函数变慢的一件事是它对数据库(这是远程的)进行了长时间的调用,但也有很多其他的可能性。到目前为止,我一直在单步执行代码,当某些事情似乎需要很长时间时,将其记为调优的候选对象。

我想要一种更客观的方式来判断哪些电话正在减慢我的速度。搜索时间和 VBA 会产生很多结果,基本上相当于“编写一个计数器,并在临界区的任一侧启动和停止它”(通常使用显式调用的宏)。我想知道是否有办法(在调试器中)执行类似“跳到下一行,并告诉我经过的时间”之类的操作。

如果没有,有人可以建议一个合理的宏,我可以在“立即”窗口中使用它来获得我想要的东西吗?具体来说,我希望能够在一个更大的过程中对任意代码行进行计时(而不是一次整个过程,这是我通过谷歌找到的)。

4

1 回答 1

3

您进一步搜索的关键字是寻找 VBA 的“Profiler”。我听说过 VB Watch 和 VBA Code Profiler System (VBACP) 以及 Stephen Bull 的 PerfMon,但除了后者,它们大多不是免费的。

到目前为止,对于我答案的官方部分,我在可能无用的建议方面提出了一些额外的建议:通过“人工测量”识别“慢”代码(运行一行并说:“哇,这需要永远”)在调试器肯定是有帮助的,然后你可以开始研究为什么它们很慢。如果您的远程数据库调用必须传输大量数据,它可能需要很长时间 - 在这种情况下,最好在两端为数据加上时间戳,并在获取数据之前询问数据库是否已修改数据。根据您编写数据的方式,将数据写入工作表可能会很慢 - 有时可以通过将数组写入范围而不是某种形式的迭代来改进。而且我可能不需要告诉你关于 ScreenUpdating 和 EnableEvents 等等?

于 2012-10-10T09:54:32.973 回答