2015-11-18 7 views
5

Мы используем Multimap для быстрого значения/индекса поиска в, объявлен как этотвызова .clear() или .erase() на станд C++ :: MultiMap иногда вызывает замораживание (100% CPU)

typedef double Numerical; 
std::multimap<Numerical, Int32> SortableRowIndex; 

И мы заполняем его парами, используя

SortableRowIndex.insert(std::pair<Numerical, Int32>(GetSortable(i), i)); 

Функция GetSortable() всегда возвращает двойной. И это прекрасно работает. Итерация через значения отлично работает. Но потом приходит странная часть ... иногда, когда мы пытаемся очистить данные ...

SortableRowIndex.clear(); 

... он идет в какой-то петли и киосков/рас, коробления используется ядро ​​процессора в 100%.

Прозрачный метод, похоже, унаследовал от xtree (системный файл) и есть только пару бокалов строк внутри:

void clear() _NOEXCEPT 
     { // erase all 
#if _ITERATOR_DEBUG_LEVEL == 2 
     this->_Orphan_ptr(*this, 0); 
#endif /* _ITERATOR_DEBUG_LEVEL == 2 */ 

     _Erase(_Root()); 
     _Root() = this->_Myhead; 
     _Lmost() = this->_Myhead; 
     _Rmost() = this->_Myhead; 
     this->_Mysize = 0; 
     } 

По какой-то причине, мой Visual Studio 2013 не позволит мне уйти в этот метод при отладке ... и я не могу, потому что жизнь меня выясняет, в чем проблема!

Любая помощь будет смешно оценена!

+2

Есть ли какие-либо NaN на входе? –

+2

это http://stackoverflow.com/questions/8096817/is-nan-a-valid-key-value-for-associative-containers можно связать – Slava

+0

Попытка выяснить, что вы имеете в виду ... ввод туда, где? –

ответ

3

Как оказалось, это не совсем затормозит, но очистка мультимары через отладчик Visual Studio ДЕЙСТВИТЕЛЬНО МЕДЛЕННО. Я заметил, что память освобождается, и пусть она работает на пару минут, а затем она наконец-то была завершена. Запуск приложения за пределами Visual Studio привело к тому, что вызовы .clear() снизились до < 1s, даже для миллионов пар.

Итак, если вы очищаете огромные мультимаксы во время работы в режиме отладки в визуальной студии. Это sloooooow.

+0

. Режим «Отказ от выпуска» так же медленный, если вы запускаете его через отладчик Visual Studio. –

+0

Все еще верно, если вам интересно. – Carbon