Boost.Asio是一个很棒的库,但它有一个巨大的缺点 - 编译时间极慢。 HTTP协议的简单实现(非常简单)(约1k行代码)需要在GCC 4.4下编译大约13.5秒!
我尝试使用PCH,但它不会过多地改善编译时间(仅限1秒左右)。
那么有没有关于如何使Boost.Asio编译时间更快的教程?
例如,我应该为哪个类准确包含哪些标题。
我使用的例如:io_service
,tcp::ip::sockets
,tcp::ip::acceptor
,deadline_timer
,缓冲区
很少有像async_read
,async_write
这样的功能。
有什么建议吗?
P.S。:我尽可能使用pimpl。
答案 0 :(得分:4)
答案 1 :(得分:4)
boost::lambda
或boost::bind
来构建完成处理程序?
boost::bind
不太复杂=>编译得更快。答案 2 :(得分:1)
嗯,你很久以前就解决了这个问题。但为了以防万一。
预编译头文件不会神奇地改善编译时间。它们通过缓存第一个头评估来改进交叉翻译单元编译时间。因此,除非您跨多个源文件#include
使用ASIO,否则您将看不到任何好处。任何新的模板实例化都将进一步使最后的好处更加明显。
我建议将ASIO隔离到单个源文件。不要在任何“非详细信息”头文件中包含ASIO。如果必须执行后者,请尝试使用Pimpl模式隐藏它。
如果您发现自己需要在多个源文件中使用ASIO功能,那么请考虑在代码和ASIO之间构建抽象层。如果你保持尽可能简单,确保桥接代码永远不会改变,那么你甚至可以在PCH中#include
这个界面。
答案 3 :(得分:1)
我们正在使用boost thread,asio和一些其他库,包括Qt。使用预编译的头文件可以使构建时间缩短10:1。我们提到了以下指导:
http://www.cygnus-software.com/papers/precompiledheaders.html
有一些方法可以进行预先推荐的标题,这样它们就不会渗透到每个文件中并使用Windows代码。