2012-10-10 16 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