3

Boost.Asio は優れたライブラリですが、コンパイル時間が非常に遅いという大きな欠点が 1 つあります。HTTP プロトコル (約 1,000 行のコード) の単純な実装 (非常に単純) を GCC 4.4 でコンパイルするには、約 13.5 秒かかります!

PCH を使用しようとしましたが、コンパイル時間はあまり改善されません (約 1 秒のみ)。

Boost.Asio のコンパイル時間を短縮する方法に関するチュートリアルはありますか?

たとえば、どのクラスにどのヘッダーを正確に含める必要がありますか。

たとえばio_servicetcp::ip::sockets、 、tcp::ip::acceptordeadline_timer、バッファ、および 、 などのいくつかの関数async_readを使用しasync_writeます。

助言がありますか?

PS: できる限りニキビを使用します。

4

4 に答える 4

4
  • boost::lambdaまたはを使用boost::bindして完了ハンドラを作成しますか? boost::bind複雑さが少ない=>コンパイルが速くなります。
  • #pragma message() でコンパイラをプロファイリングして、時間がかかるのが #include-ing なのか実際のコンパイルなのかを確認できます。これを MSVS で使用して、コンパイル時間のほとんどが .cpp 内のコードの前にある場合もあれば、ほとんど後である場合もあることを確認しました。これは、コンパイラのパフォーマンスをプロファイリングするのに役立ちます。(ただし、プリプロセッサ/#include が高速で、何よりも先に実行される場合は、あまり効果がありません)
于 2010-02-13T22:03:39.523 に答える
4

どのプラットフォーム?Linux では、ccachedistccの両方が優れており、ほとんどのディストリビューションに含まれており、個別に、または組み合わせて簡単にセットアップできます。

于 2010-02-13T20:44:42.397 に答える
2

ブースト スレッド、asio、および Qt を含む他のいくつかのライブラリを使用しています。プリコンパイル済みヘッダーを慎重に使用することで、ビルド時間が 10:1 改善されました。ガイダンスについては、以下を参照しました。

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

ヘッダーがすべてのファイルに忍び込み、コードを Windows 化しないように、ヘッダーをプリコンパイルする方法があります。

于 2011-09-20T15:06:40.607 に答える
2

まあ、あなたはおそらくこれをずっと前に解決しました。しかし、念のため。

プリコンパイル済みヘッダーによってコンパイル時間が魔法のように改善されるわけではありません。最初のヘッダー評価をキャッシュすることで、クロス翻訳ユニットのコンパイル時間を改善します。#includeしたがって、複数のソース ファイルにわたって ASIO を実行しない限り、メリットはありません。新しいテンプレートのインスタンス化により、この最後の利点はさらに目立たなくなります。

ASIO を 1 つのソース ファイルに分離することをお勧めします。「非詳細」ヘッダー ファイルに ASIO を含めないでください。後者を行う必要がある場合は、Pimpl パターンを使用して非表示にします。

複数のソース ファイルで ASIO 機能が必要な場合は、コードと ASIO の間に抽象化レイヤーを構築することを検討してください。ブリッジコードが変更されないようにできる限りシンプルに保つ場合#includeは、PCH でこのインターフェイスを使用することもできます。

于 2010-06-10T01:13:37.123 に答える