2012-10-10 17 views
0

我被要求调整其加载每个工作表打开时执行特定功能的性能(这样不会使事情慢这一点很重要)。似乎使这个功能变慢的一个原因是它对数据库进行了长时间的调用(这是远程调用),但也有一些其他的可能性。到目前为止,我一直在浏览代码,并且当某些事情似乎需要很长时间才会记录下来,作为调优的候选人。性能调优VBA代码在大型程序

我想更客观的方法来告诉它调用正在放缓我失望。搜索时序和VBA会产生大量的结果,这些结果基本相当于“写一个计数器,并在关键部分的任一侧启动和停止”(通常使用明确调用的宏)。我想知道是否有一种方法(在调试器)做一些像“步骤下一行,并告诉我时间流逝”。

如果没有,可以有人提出一个合理的宏,我可以在即时窗口,用得到我后?具体来说,我希望能够在更大的过程中使用任意代码行(而不是一次完成整个过程,这是我通过Google所找到的)。

+1

或许张贴代码,所以我们可以看到,如果这是问题? :) – brettdj

+1

恐怕也没有可能(合法部门),也不可取(1000行以上,性能敏感的位遍布)恐怕,但原则不是基于一位代码;这就是“当我试图判断一个部分的表现时,我怎么能用通用的方式来做到这一点。” – jelford

回答

3

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

到目前为止,我的回答的正式组成部分,我折腾一些额外的中也许无用的建议条款: 识别“慢”的“从人的角度测量”代码(运行线,并说:“哇,这需要永远“)在调试器当然是有帮助的,然后你可以开始研究它们为什么很慢。如果需要传输大量数据,则您的远程数据库调用可能会花费相当长的时间 - 在这种情况下,最好在两端对数据进行时间戳记,并询问数据库在抓取数据之前是否修改了数据。 将数据写入工作表可能会很慢,具体取决于您编写的方式 - 有时可以通过将数组写入某个范围而不是某种形式的迭代来改善数据。 我可能不需要告诉你关于ScreenUpdating和EnableEvents等的内容吗?

+0

我同意推荐Perfmon。 – brettdj

+0

我会考虑PerfMon。可悲的是,在进行客户端调用之外,数据库管道中的任何事情都是禁止的。 – jelford

+0

接受;我希望能比“使用探查器”更快更肮脏一点,但那必须要做。 – jelford