Performance 大型程序中VBA代码的性能调优

Performance 大型程序中VBA代码的性能调优,performance,debugging,vba,Performance,Debugging,Vba,我被要求调整一个特定函数的性能,该函数在每次打开工作表时都会加载(因此,重要的是不要让事情变慢)。使这个函数速度变慢的一个原因是它对数据库(远程数据库)进行了长时间的调用,但是还有很多其他的可能性。到目前为止,我一直在逐步浏览代码,当某些东西似乎需要很长时间才能记录下来作为调优的候选对象时 我想要一个更客观的方法来判断哪些电话让我慢下来。搜索定时和VBA会产生很多结果,基本上相当于“写一个计数器,并在临界段的任一侧启动和停止它”(通常显式调用宏)。我想知道是否有办法(在调试器中)执行类似“转到下

我被要求调整一个特定函数的性能,该函数在每次打开工作表时都会加载(因此,重要的是不要让事情变慢)。使这个函数速度变慢的一个原因是它对数据库(远程数据库)进行了长时间的调用,但是还有很多其他的可能性。到目前为止,我一直在逐步浏览代码,当某些东西似乎需要很长时间才能记录下来作为调优的候选对象时

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


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

您进一步搜索的关键词是寻找VBA的“分析器”。我听说过VBWatch和VBA代码探查器系统(VBACP)以及Stephen Bull的PerfMon,但除了后者,它们大多不是免费的

到目前为止,我的回答是官方的,我还提出了一些可能无用的建议: 在调试器中通过“人性化测量”(运行一行代码并说:“哇,这需要永远”)来识别“慢”代码当然很有帮助,然后您可以开始研究它们为什么慢。如果远程数据库调用必须传输大量数据,则可能需要相当长的时间。在这种情况下,最好在数据两端加上时间戳,并在获取数据之前询问数据库数据是否已被修改。 将数据写入工作表可能会很慢,这取决于您写入数据的方式——有时可以通过将数组写入某个范围而不是某种形式的迭代来改进。
我可能不需要告诉您屏幕更新和启用事件等信息?

或者发布代码,这样我们就可以知道这是否是问题所在了:)恐怕既不可能(法律部门),也不可取(超过1000行,性能敏感位到处都是),但原则并非基于一位代码;我同意推荐Perfmon。我将研究Perfmon。可悲的是,数据库管道中除了进行客户端调用之外的任何内容都是禁止的;我希望有一个比“使用剖析器”更快、更脏的东西,但那必须要做。