回答
閱讀關於Boost.Timers。代碼示例測量時間爲:
#include <boost/timer/timer.hpp>
boost::timer t0;
// do smth
std::cout<<"elapsed: "<< t0.elapsed() << " s\n";
一個簡單的方法來衡量你的程序的某些部分(或全部)所花費的時間是走的當前時間的快照開始,然後從減去它當前時間結束。在Windows上,您可以使用GetTickCount
函數。我在一個小幫手結構通常把這個包:
struct Duration {
Duration(const char *name)
: m_start(::GetTickCount()),
m_name(name)
{ }
~Duration() {
std::cout << m_name << " executed in " << ::GetTickCount() - start << "ms" << std::endl;
}
const DWORD m_start;
const std::string m_name;
};
您可以使用它像這樣:
int main()
{
Duration d("Program");
// Heavy work being done here
}
小的定時信息打印到stdout
爲Duration
對象被銷燬。
對於一個學術代碼也許可以,但在析構函數中添加輸出語句是非常糟糕的做法,更不用說應用程序/計算邏輯了。 – Neowizard 2012-02-24 07:32:27
@Newizard:絕對同意。但是,如果您只是想知道代碼的某些部分需要執行多長時間(如果引入自定義範圍來限制對象的生命週期,則可以使用此'Duration'類很好地),您不希望有一個很好的解耦,模塊化,基於依賴注入的概要分析框架。你只是想在你調試的時候做一些小工作 - 不管怎樣,它都不會在最後提交。 – 2012-02-24 08:18:23
我同意。這是一個很簡單的方法來做一些與運行時相關的測試/調試。只是想指出這不是一個好的製作理念 – Neowizard 2012-02-28 12:15:38
在unix上,你只需要在可執行文件的前面添加「time」前綴,如果偶然有安裝Cygwin,那麼這就是我的建議。否則,請檢查Performance Counters,這是MS平臺上過程性能數據的來源。在應用程序退出之前,應該可以用一個額外的方法調用來解決這個問題。
- 1. 測量在應用程序/線程中花費的時間
- 2. 運行程序的時間花費
- 3. 測量過程所花費的絕對時間
- 4. 測量使用流時內核花費的總時間
- 5. 總共花費的時間和所有線程所花費的平均時間
- 6. 在Makefile的每個目標上花費的時間測量
- 7. 測量「在GC中花費的時間百分比」
- 8. 測量API調用所花費的時間
- 9. 測量花費執行代碼的時間
- 10. 測量Java類運行所花費的時間
- 11. 對於需要花費大量時間
- 12. 花費file_get_contents的時間
- 13. 花費的實際時間
- 14. 查找過程騾流量所花費的時間
- 15. 查找在內核例程中花費的CPU時間量
- 16. MagicalRecord節省花費時間
- 17. MDX查詢花費時間
- 18. sqlite3需要花費時間
- 19. WebRequest.GetResponse()花費太多時間
- 20. :app:transformClassesAndResourcesWithProguardForRelease花費太長時間
- 21. Selenium webdriver find_element_by_xpath花費時間
- 22. 在json中花費時間
- 23. ViewResult.ExecuteResult花費太長時間
- 24. GraphAlgoFactory.allSimplePaths花費很多時間
- 25. 用戶花費多少時間在我的程序上?
- 26. SurfaceHolder.lockCanvas()爲我的遊戲應用程序花費太長時間
- 27. iOS應用程序提交花費的時間太多
- 28. ASP.NET Web應用程序需要花費大量的時間來調試
- 29. 如何衡量我想不過來衡量我的C++程序所花費的時間,如果我用程序
- 30. 多線程程序的測量時間
http://stackoverflow.com/questions/673523/how-to-measure-execution-time-of-command-in-windows-command-line提供了幾種解決方案。 – timrau 2012-02-24 07:22:23