Ejecuté un generador de perfiles (muy soñoliento) en mi programa y muestra un alto porcentaje en mi función de reinicio (la función de reinicio se ejecuta por fotograma). Los programas se ve así:vector :: clear() cuesta tanto tiempo?
Sección Init:
std::vector<std::vector<int>> VecOfVecOfPath;
VecOfVecOfPath.resize(20);
for(int i=0; i<20; i++) VecOfVecOfPath.reserve(640);
VecOfVecOfPath es una serie de camino encontrado por otras funciones. VecOfVecOfPath [i] se completará durante la ejecución, por fotograma. P. ej. Es push_back
-ed por otras funciones, y restablecer antes de usar, por cuadro.
La función de reinicio:
void Reset()
{
for(int i=0; i<20; i++) VecOfVecOfPath[i].clear();
}
Así que la reposición es muy simple, pero sí tienen un muy alto rango en perfilador.
¿Es esto común? ¿Tiene vectorial :: clear() tener tales gastos generales incluso para los vectores de tipo incorporados?
Gracias!
Intenté construir el programa en modo Release y luego el costo se redujo a casi cero. De 12 ~ 13% a 0.03 ~ 0.04%.
Luego fui al código fuente de y hay definiciones como ITERATOR_DEBUG_LEVEL efectuando operaciones adicionales en el modo de depuración.
Así es como se sugirió @ noggin182, las cosas son diferentes en el modo de depuración y liberación.
Cita: "Meke Seguro que está perfilando en la liberación y acumulación de búsqueda para ver si hay alguna preprocesador condicional define configura para aumentar el rendimiento - noggin182 Ene 3 en el 15:32."
¿Ha considerado que está llamando 'clear' innecesariamente? –
@parapurarajkumar - lo primero que se me ocurrió, también. Creo que necesitamos más detalles sobre el uso de 'VecOfVec'; quizás los Vecs se puedan reciclar para evitar el claro. –
vector del vector de qué? –