如何跟踪正在运行的过程

时间:2013-04-23 23:39:52

标签: ms-access ms-access-2010

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

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

我在每个sub的开头插入了以下代码,并在VBA中为表单插入了函数:

sProcList = sProcList & "lstContacts_Click" & nl

其中:

  • sProcList是全局字符串变量
  • "lstContacts_Click"是字符串/函数的名称
  • nl功能正常vbCRLF

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

Form_Open
ChangeSortOrder 1
lstContacts_Click

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

1 个答案:

答案 0 :(得分:0)

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