Ho eseguito un profiler (molto assonnato) sul mio programma e mostra un'alta percentuale sulla mia funzione di reset (la funzione di reset gira per fotogramma). I programmi aspetto:vector :: clear() costano così tanto tempo?
Init Sezione:
std::vector<std::vector<int>> VecOfVecOfPath;
VecOfVecOfPath.resize(20);
for(int i=0; i<20; i++) VecOfVecOfPath.reserve(640);
VecOfVecOfPath è una serie di percorso trovato da altre funzioni. VecOfVecOfPath [i] verrà riempito durante l'esecuzione, per frame. E.g. È push_back
-edato da altre funzioni e ripristinato prima dell'uso, per frame.
La funzione di reset:
void Reset()
{
for(int i=0; i<20; i++) VecOfVecOfPath[i].clear();
}
Così il ripristino è molto semplice, ma hanno una bella alto posizionamento nei profiler.
È comune? Vector :: clear() ha tali overhead anche per i vettori di tipo built-in?
Grazie!
Ho provato a creare il programma in modalità di rilascio e quindi il costo ridotto quasi a zero. Dal 12 ~ 13% a 0,03 ~ 0,04%.
Quindi sono passato al codice sorgente di e ci sono definizioni come ITERATOR_DEBUG_LEVEL che effettuano operazioni aggiuntive in modalità Debug.
Quindi è come suggerito @ noggin182, le cose sono diverse nella modalità Debug e Release.
Citazione: "Meke che si sta profilando in build di rilascio e di ricerca per vedere se ci sono preprocessore condizionale definisce si imposta per migliorare le prestazioni - noggin182 3 gennaio alle 15:32."
Hai considerato che chiami 'clear' inutilmente? –
@parapurarajkumar: la prima cosa che mi è venuta in mente. Penso che abbiamo bisogno di maggiori dettagli sull'uso di 'VecOfVec' - forse i Vec possono essere riciclati per evitare la cancellazione. –
vettore di vettore di cosa? –