Профилирование кода сериализации - PullRequest
0 голосов
/ 02 июня 2011

Я дважды запускал свое приложение (в VS ide). Первый раз это заняло 33 секунды. Я разложил obj.save, который вызывает много кода, и это заняло 87 секунд. Вот какой-то медленный код сериализации! Я подозреваю две проблемы. Во-первых, я делаю ниже

template<class T> void Save_IntX(ostream& o, T v){ o.write((char*)&v,sizeof(T)); }

Я называю эти шаблоны сотни тысяч раз (ну, может быть, не так много). Каждый ли .write () использует блокировку, которая может замедлять его? возможно я могу использовать пар памяти, который не требует блокировки и дампа это вместо этого? Какой ostream можно использовать, который не блокирует и, возможно, зависит от того, используется ли он только в одном потоке?

Другая подозреваемая проблема - я часто использую dynamic_cast. Но я не уверен, смогу ли я обойти это.

Вот сеанс быстрого профилирования после преобразования его в fopen вместо ostream. Интересно, почему я не вижу большинство своих функций в этом списке, но, как вы можете видеть, запись все еще занимает больше всего времени Примечание: я просто понимаю, что мой выходной файл составляет половину гигабайта. упс. Может быть, поэтому.

enter image description here

1 Ответ

1 голос
/ 03 июня 2011

Я рад, что вы выяснили это, но в следующий раз, когда вы выполните профилирование, вы можете рассмотреть несколько моментов:

  • Профилировщик VS в режиме выборки не выполняет выборку во время ввода-вывода или в любое другое время, когда ваша программа блокируется, поэтому он действительно полезен только для профилирования с привязкой к ЦП. Например, если в подпрограмме указано, что время занимает 80% времени, а приложение фактически вычисляет только 10% времени, то 80% - это всего лишь 8%. По этой причине для любой работы без привязки к ЦП необходимо использовать режим инструментария профилировщика.

  • Предполагая, что вы сделали это из всех этих столбцов данных, значение имеет значение "Inclusive%", потому что это истинная стоимость процедуры, в том смысле, что если ее можно избежать, то сколько общее время будет сокращено.

  • Из всех этих строк данных, вероятно, имеют значение те, которые содержат ваши подпрограммы, потому что ваши подпрограммы являются единственными, с которыми вы можете что-либо делать. Похоже, что «Неизвестные кадры» могут быть вашим кодом, если ваш код скомпилирован без отладочной информации. Как правило, рекомендуется создать профиль с информацией об отладке, быстро выполнить ее и затем удалить информацию об отладке.

...