По какой-то причине мы ' Мы видим, что уничтожение слабых указателей обходится дорого. Вот код виновника:
~weak_count() // nothrow
{
if(pi_ != 0) pi_->weak_release(); // Consumes a huge chunk of our time.
#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
id_ = 0;
#endif
}
Мы не в режиме отладки, и отладочные хуки не задействованы. Слабый релиз отнимает поистине феноменальное количество времени. Это известная проблема? Мы что-то делаем не так?
Версия Boost: 1.36
Компилятор: VS2008 Compiler Suite.
К сожалению, мы заблокированы этой версией Boost по разным причинам, поэтому мне больше интересно, могут ли такие причудливые расходы дублироваться в новых версиях или представляют собой результат известной плохой практики. Мы уничтожаем только порядка 500 тыс. Слабых указателей, что не должно приводить к заметной разнице в производительности от уничтожения аналогичного количества необработанных указателей. Конечно, не увеличение стоимости в 2,5-4 раза. Обратите внимание, что мы не удаляем объекты, на которые нацелены указанные указатели. Эти расходы связаны исключительно с уничтожением самих указателей.
Что здесь происходит?