簡體   English   中英

如何使用Boost Asio減少編譯時間

[英]How to reduce compilation times with Boost Asio

Boost.Asio是一個很棒的庫,但它有一個巨大的缺點 - 編譯時間極慢。 HTTP協議(大約1k行代碼)的簡單實現(非常簡單)需要在GCC 4.4下編譯大約13.5秒!

我嘗試使用PCH,但它沒有太多改進編譯時間(僅約1秒)。

那么有沒有關於如何使Boost.Asio編譯時間更快的教程?

例如,我應該為哪個類准確包含哪些標題。

我用的例如: io_servicetcp::ip::socketstcp::ip::acceptordeadline_timer ,buffers和async_readasync_write等少數函數。

有什么建議么?

PS:我盡可能使用pimpl。

什么平台? 在Linux上, ccachedistcc都很棒,包含在大多數發行版中,並且可以單獨或甚至組合設置。

  • 你使用boost::lambdaboost::bind構建你的完成處理程序嗎? boost::bind不那么復雜=>編譯得更快。
  • 您可以使用#pragma message()來分析編譯器,以查看它是#include還是需要時間的實際編譯。 我已經在MSVS上使用它來看到有時,大多數編譯時間都在.cpp中的任何代碼之前,有時候,它主要是在之后。 這可以幫助您分析編譯器的性能。 (但是,如果預處理器/ #include是快速的並且在其他任何東西之前運行,它將不會給你太多)

好吧,你很久以前就解決了這個問題。 但為了以防萬一。

預編譯的頭文件不會神奇地改善編譯時間。 compile times by cacheing the first header evaluation. 它們通過緩存第一個頭評估來改進編譯時間。 因此,除非您跨多個源文件#include ing ASIO,否則您將看不到任何好處。 任何新的模板實例化都將進一步使最后的好處更加明顯。

我建議將ASIO隔離到單個源文件。 不要在任何“非詳細信息”頭文件中包含ASIO。 如果必須執行后者,請嘗試使用Pimpl模式隱藏它。

如果您發現自己需要在多個源文件中使用ASIO功能,那么請考慮在代碼和ASIO之間構建抽象層。 如果你保持盡可能簡單,確保橋接代碼永遠不會改變,那么你甚至可以在PCH中#include這個接口。

我們正在使用boost thread,asio和一些其他庫,包括Qt。 使用預編譯的頭文件可以使構建時間縮短10:1。 我們提到以下指導:

http://www.cygnus-software.com/papers/precompiledheaders.html

有一些方法可以進行預先建議的標題,這樣它們就不會滲透到每個文件中並使用Windows化代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM