2014-03-05 60 views
1

我一直在分析我們的代碼,並注意到有很多時間花在提升時間和日期函數上。似乎大部分時間都在驗證該數字是否在範圍內並且是有效的。是否有一個編譯器選項可以關閉此驗證以提高升壓日期時間函數的性能?有沒有辦法關閉提升日期和時間驗證

+0

看看執行了「時間和日期函數」,看看你是否能找到一些'#ifdef'或代碼的源代碼'#ifndef'在它周圍。快樂黑客! –

+0

@RaydelMiranda,聽起來像非常糟糕的建議。相反,查看文檔並找出哪些方法執行驗證(例如,複製構造函數可能不會)。現在,查看您是否可以使用這些API成員編寫重複任務 – sehe

回答

0

看起來沒有辦法規避這種情況。

該驗證是無條件的,通過設計。但只有在需要時纔會發生(當接收到來自外部來源的輸入時)。其餘時間,代碼庫中的不變量不再需要重新驗證。

(參見例如http://www.boost.org/doc/libs/1_55_0/doc/html/date_time/gregorian.html#date_intro的相關文件引號)

當然,你可以嘗試

  • 避免在可能
  • 避免轉換到/從升壓DATATIME類型解析日期/時間在可能的情況下

特別是,如果這成爲一個瓶頸,可能你是

  • 解析大量的輸入(在這種情況下,我認爲,驗證只是需要和一件好事(TM)
  • 也許使用升壓日期時間低效(例如如果你使用C API的localtime()並將結果轉換爲Boost類型。在這種情況下,更願意使用升壓時鐘的時間(如second_clock::local_time()gregorian::day_clock()
相關問題