Ответ 1
Какая платформа? В Linux обе ccache и distcc являются удивительными, включенными в большинство дистрибутивов и оснасткой для настройки, индивидуально или даже комбинированными.
Boost.Asio - отличная библиотека, но у нее есть один огромный недостаток - медленное время компиляции. Простая реализация (действительно простая) протокола HTTP (около 1 тыс. Строк кода) требует около 13,5 с для компиляции под GCC 4.4!
Я попытался использовать PCH, но он не улучшает время компиляции слишком много (около 1 с).
Итак, есть ли какие-либо уроки о том, как быстрее выполнять компиляцию Boost.Asio?
Например, какие заголовки я должен точно указать для какого класса.
Я использую например: io_service
, tcp::ip::sockets
, tcp::ip::acceptor
, deadline_timer
, буферы
и несколько функций, таких как async_read
, async_write
.
Любые предложения?
P.S.: Я использую pimpl, когда могу.
Какая платформа? В Linux обе ccache и distcc являются удивительными, включенными в большинство дистрибутивов и оснасткой для настройки, индивидуально или даже комбинированными.
boost::lambda
или boost::bind
для создания обработчиков завершения?
boost::bind
менее сложный = > быстрее компилируется.Хорошо, вы, наверное, решили это давно. Но на всякий случай.
Предварительно скомпилированные заголовки не волшебным образом улучшают время компиляции. Они улучшают время перекрестного перевода, кэшируя первую оценку заголовка. Таким образом, вы не увидите преимущества, если вы не используете #include
ASIO для нескольких исходных файлов. Любые новые экземпляры шаблонов будут в дальнейшем сделать это последнее преимущество еще менее заметным.
Я предлагаю изолировать ASIO к одному исходному файлу. Не включайте ASIO в любые файлы заголовков "без деталей". Если вы должны сделать последнее, попробуйте скрыть его, используя шаблон Pimpl.
Если вы нуждаетесь в функциональности ASIO в нескольких исходных файлах, подумайте о создании уровня абстракции между вашим кодом и ASIO. Если вы сохраните его как можно проще, убедитесь, что код моста никогда не изменяется, тогда вы можете даже #include
использовать этот интерфейс в PCH.
Мы используем boost thread, asio и несколько других libs, включая Qt. Использование предварительно скомпилированных заголовков тщательно делало улучшение времени сборки на 10: 1. Мы указали следующее для руководства:
http://www.cygnus-software.com/papers/precompiledheaders.html
Есть способы делать precomiled заголовки, чтобы они не ползали в каждый файл и не подтверждали ваш код.