Как определить, какие части кода занимают много времени?
Я уже использую предварительно скомпилированные заголовки для всех своих заголовков, и они определенно улучшают скорость компиляции. Тем не менее, всякий раз, когда я вношу изменения в свой исходный файл на С++, компиляция занимает много времени (это связано с ЦП/памятью, а не с протоколом ввода-вывода - все кэшировано). Кроме того, это не связано с частью связывания, просто частью компиляции.
Я попытался включить /showIncludes
, но, конечно, поскольку я использую предварительно скомпилированные заголовки, после stdafx.h
ничего не включается. Поэтому я знаю, что только исходный код требует времени для компиляции, но я не знаю, какая его часть.
Я также пытался сделать минимальную сборку, но это не помогает. Также не существует /MP
, потому что это единственный исходный файл.
Я мог бы попытаться проанализировать исходный код и выяснить, какая часть является узким местом, добавив/удалив его, но это боль и не масштабируется. Кроме того, трудно удалить что-то и допустить компиляцию кода - сообщения об ошибках, если они есть, возвращаются почти сразу.
Есть ли лучший способ выяснить, что замедляет компиляцию?
Или, если нет способа: существуют ли какие-либо языковые конструкции (например, шаблоны?), которые занимают намного больше времени для компиляции?
Что я имею в своем исходном коде на С++:
-
Три (относительно больших) диалоговых класса ATL (включая определения/логику).
Они вполне могут быть причиной, но в любом случае они являются основной частью программы, поэтому, очевидно, их нужно перекомпилировать, когда я их меняю.
-
Случайные однострочные (или аналогично малые) функции полезности, например. конвертер byte-array-to-hex
-
Ссылки на (встроенные) классы, найденные внутри моих файлов заголовков. (Один из файлов заголовков является гигантским, но он использует только минимальные шаблоны и, конечно, предварительно скомпилирован. Другой - TR1
regex
- он огромный, но он почти не используется.)
Примечание:
Я ищу методы , которые я могу применить в общих чертах, чтобы выяснить причину этих проблем, не конкретные рекомендации для моей конкретной ситуации. Надеюсь, это было бы более полезно и для других людей.