Я запустил профилировщик (очень сонный) в моей программе, и он показывает высокий процент в моей функции сброса (функция сброса запускается для каждого кадра).Программы выглядят так:
Раздел инициализации:
std::vector<std::vector<int>> VecOfVecOfPath;
VecOfVecOfPath.resize(20);
for(int i=0; i<20; i++) VecOfVecOfPath.reserve(640);
VecOfVecOfPath - это последовательность путей, найденная другими функциями.VecOfVecOfPath [i] будет заполняться во время выполнения для каждого кадра.Например, push_back
-подключается другими функциями и сбрасывается перед использованием для каждого кадра.
Функция сброса:
void Reset()
{
for(int i=0; i<20; i++) VecOfVecOfPath[i].clear();
}
Таким образом, сброс очень прост, но он делаетимеют довольно высокий рейтинг в профилировщике.
Это часто встречается?Есть ли у vector :: clear () такие издержки даже для векторов встроенного типа?
Спасибо!
Я пытался собрать программу в режиме Release, а затем стоимость снизилась допочти ноль.От 12 ~ 13% до 0,03 ~ 0,04%.
Затем я перешел к исходному коду и есть определения, например ITERATOR_DEBUG_LEVEL, выполняющие дополнительные операции в режиме отладки.
Так что это похоже на @ noggin182Предполагается, что в режиме отладки и выпуска все по-другому.
Цитата: «Убедитесь, что вы профилируете в сборке выпуска и выполните поиск, чтобы увидеть, есть ли какие-то условные выражения препроцессора, которые вы настроили для повышения производительности. - noggin182 3 января в15:32"