2

问题:
有没有办法跟踪在打开表单期间发生的对子程序和函数的所有调用(有点像历史的“调用堆栈”)?我对在填充控件的查询中调用的函数不感兴趣,只对表单或控件级别的函数感兴趣。

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

我在表单的 VBA 中的每个子和函数的开头插入了以下代码:

sProcList = sProcList & "lstContacts_Click" & nl

在哪里:

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

当我在表单完全打开后检查变量时,sProcList 是这样的:

Form_Open
ChangeSortOrder 1
lstContacts_Click

这实际上是我想要发生的事情,但我不相信这是准确的。我不知道更好的方法来做到这一点。

4

1 回答 1

0

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

于 2014-02-01T00:45:37.970 回答