C++,使用 boost 和 std::chrono 以来的时间?为什么 Boost 版本慢 10 倍?
C++, time since epoch using boost and std::chrono? Why is the Boost version 10 times slower?
我想要一个函数来获取自 ns 纪元以来的时间。我有一个使用 boost::ptime
:
的解决方案
auto cur_time = ptime(day_clock::universal_day(), return microsec_clock::universal_time().time_of_day());
return (cur_time - date(1970,1,1)).total_microseconds();
我还使用 std::chrono:
测试了解决方案
return std::chrono::duration_cast< std::chrono::microseconds >(std::chrono::system_clock::now().time_since_epoch()).count();
boost方案比std::chrono方案慢10倍。 (在我的 Linux 机器上是 150ns vs 1500ns)。有没有更好(更快)的方法来获取我缺少的 Boost::datetime 纪元以来的时间?
Boost 是灵活的跨平台代码,libstdc++(大概是您正在使用的标准库)是与您的编译器一起编写的,并且是比 boost::chrono 更新的代码,因此更有可能实现最高效的实现。
我总是建议在可能的情况下以及在标准库实现完成的情况下使用标准库实现而不是 boost。使用单个 #ifdef
.
在实现之间切换通常相当容易
我想要一个函数来获取自 ns 纪元以来的时间。我有一个使用 boost::ptime
:
auto cur_time = ptime(day_clock::universal_day(), return microsec_clock::universal_time().time_of_day());
return (cur_time - date(1970,1,1)).total_microseconds();
我还使用 std::chrono:
测试了解决方案return std::chrono::duration_cast< std::chrono::microseconds >(std::chrono::system_clock::now().time_since_epoch()).count();
boost方案比std::chrono方案慢10倍。 (在我的 Linux 机器上是 150ns vs 1500ns)。有没有更好(更快)的方法来获取我缺少的 Boost::datetime 纪元以来的时间?
Boost 是灵活的跨平台代码,libstdc++(大概是您正在使用的标准库)是与您的编译器一起编写的,并且是比 boost::chrono 更新的代码,因此更有可能实现最高效的实现。
我总是建议在可能的情况下以及在标准库实现完成的情况下使用标准库实现而不是 boost。使用单个 #ifdef
.