2013-04-23 151 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.也可以寫一些文本文件的行。

相關問題