Я дважды запускал свое приложение (в 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. Интересно, почему я не вижу большинство своих функций в этом списке, но, как вы можете видеть, запись все еще занимает больше всего времени Примечание: я просто понимаю, что мой выходной файл составляет половину гигабайта. упс. Может быть, поэтому.