回答
我發現以下非常有用:
#ifdef PROFILING
# define PROFILE_CALL(x) do{ \
const DWORD t1 = timeGetTime(); \
x; \
const DWORD t2 = timeGetTime(); \
std::cout << "Call to '" << #x << "' took " << (t2 - t1) << " ms.\n"; \
}while(false)
#else
# define PROFILE_CALL(x) x
#endif
可以在調用函數被用作這樣的:
PROFILE_CALL(renderSlow(world));
int r = 0;
PROFILE_CALL(r = readPacketSize());
從本質上講,如果剖析工具不可用,那麼您就可以模擬剖析器將會完成的工作。您可以將計數器插入到您認爲有趣的函數中,並計算多少次,並計算它們被調用的大小/種類的參數。
如果你有機會到你的平臺上的所有計時器,您就可以開始/之初/結束阻止這些說函數來獲取執行時間信息爲好,如果這是從代碼不清楚。這將給你在複雜代碼中最大的壓力,因爲通常會有太多的函數來測試它們。相反,您可以通過爲每個代碼分配一個計時器來獲取代碼的某些部分所花費的時間。
這兩種串聯技術可以形成一種迭代方法,您可以在其中找到大量使用定時器消耗大部分循環的代碼,然後以更精細的粒度對各個函數進行處理以磨練問題。
如果是東西足夠長的持續時間(例如一分鐘以上),我運行該軟件在調試器則打破了幾次,看看那裏的調試器中斷,這給軟件就是一個非常粗略的想法直到(例如,如果你打破10次,他們都在同一個地方,這告訴你一些有趣的事情!)。 非常粗糙,準備好,但不需要任何工具,儀器儀表等
不開玩笑:除傾銷定時到std ::法院和麪向方法我也用了蜂鳴()函數其他文本/數據。聽到兩個「嗶嗶」檢查站之間的沉默間隙有些東西可以讓人產生不同的印象。
這就像看一個書面樂譜,居然聽到了音樂的區別。這就像讀取rgb(255,0,0)和看到消防車紅色之間的差異。
所以,現在我有一個客戶端/服務器應用程序,並使用不同頻率的蜂鳴聲,標記客戶端發送消息的位置,服務器在哪裏啓動應答,完成應答,應答首先進入客戶端等,我可以很自然地感受到時間花在哪裏。
真是個好主意。 – 2008-11-13 00:44:06
我會使用80/20法則,把周圍的熱點或有趣的調用路徑定時器。您應該對瓶頸(或至少大部分執行路徑)的位置有一個總體思路,並使用適當的平臺相關高分辨率定時器(QueryPerformanceCounters,gettimeofday等)。
我通常不與任何在啓動或關機(除非需要),並具有明確定義的「咽喉要道」,通常是消息傳遞或某種算法計算的麻煩。我通常發現消息接收器/ srcs(sinks moreso),隊列,互斥鎖和簡單的混亂(算法,循環)通常會佔據執行路徑中的大部分延遲。
我不確定你有什麼樣的平臺,但是在嵌入式微控制器上,使用示波器,計數器/定時器或邏輯分析儀來旋轉備用數字輸出線和測量脈衝寬度有時很有用。
您是否使用Visual Studio?
您可以使用/ Gh和/ GH開關。 Here's an example involving stack inspection
這些標誌允許您逐個文件地註冊每次輸入方法和/或在運行時留下的未調用函數。
然後,您可以註冊分析信息的所有時間,而不僅僅是時間信息。堆棧轉儲,調用地址,返回地址等。這很重要,因爲您可能想知道'函數X在函數Z下使用了Y時間',而不僅僅是函數X中花費的總時間。
- 1. 您使用哪些技術來最大化代碼重用?
- 2. 我可以使用哪些技術來調試我的Clojure代碼?
- 3. ASP.NET爲您的客戶提供API有哪些好的技術?
- 4. 可以應用哪些通用技術來優化SQL查詢?
- 5. 有沒有一些常用的技術來分析基於協程的代碼?
- 6. 您可以配置VS2008代碼分析以使用英式英語詞典嗎?
- 7. 您將使用哪種技術來進行物理仿真SVG或Canvas?
- 8. 您使用哪些工具分析文本?
- 9. 您是否可以阻止用戶查看您的Alexa技能?
- 10. 用戶生成數據的定性分析有哪些信息分析技術?
- 11. 您可以使用哪些webdriver的操作鏈呢?
- 12. 您可以使用哪些組件創建AIR應用程序?
- 13. 您可以編寫Java代碼來檢查您的本地Internet Explorer的版本
- 14. 要使用哪些Java EE技術?
- 15. 10。我應該使用哪些技術?
- 16. 有哪些方法可以利用SecurID和類似的技術?
- 17. 您可以在Jquery.live選擇器中使用哪些過濾器?
- 18. 使用哪些技術來編寫在語言之間切換的解析器?
- 19. ADO.NET包含哪些技術?
- 20. 您可以在運行時更改哪些JavaScript代碼?維基百科
- 21. 哪裏可以查看哪些xilinx fpga技術支持哪些dcm/pll?
- 22. 您使用哪些Javascript編程模式?
- 23. 您使用Sun CoolThreads技術的經驗是什麼?
- 24. 您可以使用Google Analytics代碼的包含文件嗎?
- 25. 目前正在使用哪些技術來加速下一代JavaScript引擎?
- 26. 哪種分析技術最適合分析程序行爲
- 27. 您可以使用Asterisk ARI
- 28. 創建API可爲您的服務帶來哪些好處?
- 29. 這款基於瀏覽器的乒乓遊戲可以使用哪些技術?
- 30. 您應該何時堅持使用新技術進行培訓?
我喜歡這樣。可以將其定義爲x;正常運行。 – EvilTeach 2008-11-13 00:50:14
是的,我這樣做,但我忘了把它添加到我的答案。感謝您的提醒。 – 2008-11-13 14:38:50