2010-07-14 3 views
3

У меня есть проект средней длины, который активно использует библиотеки boost и, следовательно, страдает с точки зрения производительности приложений отладки (Visual Studio 2008).Вопрос оптимизации C++

Решение, которое я использую прямо сейчас, означает включение функции вставки даже в режиме отладки, что приносит достаточную производительность, но должно обязательно иметь некоторые недостатки.

Кто-нибудь знает, что я потеряю с точки зрения возможностей отладки, если я заставляю функцию inlining (/Ob2) переключаться?

Возможно, у кого-то есть другие идеи об ускорении форсирования/других библиотеках шаблонов. Отладочная производительность?

+2

Вы профилировали программу? Что, если это просто субоптимально написано? – sharptooth

+0

@sharptooth Я профилировал метод «Render» моего приложения и добавил, что методы 'boost', которые имеют множество утверждений assert, могут легко разрезать 150 fps до 15 =) –

ответ

8

На мой взгляд, вы должны, вероятно, не проверить производительность отладочной версии.

Сохраните отладочную версию для модульного тестирования, чтобы вы могли легко найти проблемы, но реальные испытания (функциональность и производительность), вероятно, должны быть в версии выпуска.

Это то, что ваши клиенты будут работать в конце концов, не так ли?

+3

+1. В сборках отладки часто входят тонны параноидальных проверок, которые потребляют много времени. – sharptooth

+2

В игровом программировании существует общая проблема, для которой часто требуется режим Debug, чтобы работать достаточно быстро, чтобы помочь в отладке игры. В этом контексте ваш ответ не помог бы. Однако, если он работает «достаточно быстро, чтобы отлаживать» в Debug и действительно лучше в Release, тогда вы правы: оптимизация имеет смысл только в Release. – Klaim

1

Я предлагаю отлаживать приложение, созданное в режиме отладки, и использовать его, когда он построен в режиме деблокирования (для тестов производительности, общего использования и т. Д.). Таким образом вам не нужно беспокоиться о потере чего-либо во время отладки.

В любом случае включение включения функций в Debug может привести к запутыванию отладчика при прохождении кода и вызове функции функции, которая была встроена. Но я никогда не тестировал это, поэтому я не уверен.

1

Использовать /Ob2 как в конфигурациях отладки, так и в выпуске. Поэтому, когда вы его отлаживаете, он будет вести себя так же, как в режиме деблокирования.

3

Я согласен с предыдущими ответами, что вы не должны заботиться о производительности вашей отладочной сборки в целом. Тесты там, потому что мы нуждаемся в них ...

Однако, я прагматичный программист, и есть причина, по которой я не использую приложение, основанное на valgrinded, для запуска моих тестов: я не хочу, чтобы они были слишком медленными либо потому, что система становится совершенно непрактичной в этой точке.

Я не вижу ничего плохого в том, чтобы включить вложение, конечно, что отладчик может иметь некоторые проблемы, выбирающие место в коде, который создавал код, но он не модифицирует сам код.

Я также видел частично-отладочные сборки. Идея состоит в том, чтобы отключить те функции отладки, которые действительно калечат программу (например, проверку итератора), так что производительность остается приемлемой для данной задачи. Это потенциально может помочь вам здесь, если вы считаете, какие функции отладки замедляют вас. Говоря, что у меня никогда не было проблем с производительностью с повышением, но затем я скомпилирую его с помощью gcc, и я не знаю, сохранилась ли инкрустация или нет в отладке.

+0

+1 для частичной сборки отладки. Я создал цель fast_debug перед удалением 'assert', а также отключил проверку границ/итераторов. Однако он не был включен. – KitsuneYMG

Смежные вопросы