亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

秒表與將System.DateTime.Now用于計時事件進行對比

秒表與將System.DateTime.Now用于計時事件進行對比

慕桂英546537 2019-10-21 09:58:49
我想跟蹤代碼的性能,因此我使用來存儲開始時間和結束時間System.DateTime.Now。我將兩者之間的差異作為執行代碼的時間。我注意到,雖然差異似乎并不準確。所以我嘗試使用一個Stopwatch對象。事實證明,這要準確得多。誰能告訴我為什么Stopwatch比使用來計算開始和結束時間之間的差會更準確System.DateTime.Now?順便說一句,我說的不是十分之一。我大約有15-20%的差異。
查看完整描述

3 回答

?
MM們

TA貢獻1886條經驗 獲得超2個贊

根據MSDN:


秒表通過計算基礎計時器機制中的計時器滴答來測量經過的時間。如果安裝的硬件和操作系統支持高分辨率性能計數器,則Stopwatch類將使用該計數器來測量經過的時間。否則,秒表類將使用系統計時器來測量經過的時間。使用Frequency和IsHighResolution字段來確定秒表計時實現的精度和分辨率。


它使用的分辨率/精度高于DateTime.Now。


您還可以查看以下相關鏈接:


Environment.TickCount與DateTime.Now


DateTime.Now現在是衡量函數性能的最佳方法嗎?


DateTime足夠精確到秒,但是我推薦的以外的任何東西StopWatch。


查看完整回答
反對 回復 2019-10-21
?
湖上湖

TA貢獻2003條經驗 獲得超2個贊

最好使用Stopwatch類,因為它比減去DateTime值更準確:


Stopwatch s = Stopwatch.StartNew();

// Tested code here

s.Stop();

Console.WriteLine("Elapsed Time: {0} ms", s.ElapsedMilliseconds);

不幸的是,這段簡單的代碼大部分時間都無法獲得準確的測量結果,因為在OS的內部進行了大量的活動,這可能會占用一些CPU時間并減慢代碼的執行速度。這就是為什么最好多次執行測試,然后刪除最低和最高的時間。對于那個小女孩來說,擁有一種方法可以多次執行被測試的代碼,刪除最短和最大的時間并計算平均時間是一個很好的解決方案。我已經在博客中發布了一種示例測試方法。


查看完整回答
反對 回復 2019-10-21
?
慕哥6287543

TA貢獻1831條經驗 獲得超10個贊

此計時功能性能鏈接討論您的確切問題,特別是本段:


問題是,根據MSDN,DateTime.Now函數的分辨率為10毫秒以上,我們需要調用兩次!因此,這會在您的運行時測量中引入20毫秒以上的擺幅。由于我們的函數調用返回時間通??赡鼙?0ms窗口快得多,因此這還不夠好。


編輯:聽起來像第二個DateTime.Now在與秒表方法結束時不同的時間被調用。


查看完整回答
反對 回復 2019-10-21
  • 3 回答
  • 0 關注
  • 801 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號