2013-04-23 65 views
2

问题:
有没有一种方法可以跟踪在表单打开期间发生的所有对子和函数的调用(类似历史“调用堆栈”)?我对在查询填充控件中调用的函数不感兴趣,只有在窗体或控件级别的函数才会调用这些函数。如何跟踪哪些程序正在运行

背景:
我的表单加载的时间比我认为的要长得多。我认为一些事件过程正在多次运行,以响应被重新调用的控件和被调用的特定“on_click”过程。

我插入下面的代码在每个子和功能在VBA为形式的开头:

sProcList = sProcList & "lstContacts_Click" & nl 

其中:

  • sProcList是一个全局字符串变量
  • "lstContacts_Click"是子/函数的名称作为字符串
  • nl功能上vbCRLF

当我检查,一旦形式已经完全打开变量,sProcList是这样的:

Form_Open 
ChangeSortOrder 1 
lstContacts_Click 

其实,这是我想是发生了什么,但我不认为这是准确。我不知道有更好的方法去做。

回答

0

由于性能是一个问题,你需要稍强一点的东西,它不仅会跟踪子程序名称,而且还会跟踪这些子程序中花费的时间。这将导致你找到最大的罪犯,然后你可以通过在这些例程中的代码段添加计时器来磨合。 几年前,我被雇用来修复交付给70多个国家的新开发的Access数据库的性能,但在某些条件下有2分钟的响应时间。 简单地说,我做了以下操作(我将跳过完整的描述): 1.创建一个表格,其中包含用于存储“开始或结束”模块名称,子例程,日期,计时器,已用,BytesSent,接收,I/O,等等。 2.设计一个表单,可以打开包含代码(Forms,Reports,Modules)的所有东西;提供了选择所需物体的能力。 3.除非被排除,否则代码被自动插入到子程序的顶部以记录“开始”记录,并且无论您何时可以退出,都会记录“结束”。该表单非常聪明,可以自定义代码来捕获对象名称和子例程名称。 4.增加了一个子程序来处理开始/结束记录并计算时间,字节和I/O。 作为一个简单的解决方案,你可以: 1.添加子程序startTimer所变量保存定时器 2.子的顶部,保存定时器来startTimer所 3.加入Debug.print“开始XYZ” & startTimer所 4.在出口点Calc计时器 - StartTimer和debug.print经过的时间。 5.也可以写一些文本文件的行。

相关问题