Programımda bir profiler (çok uykulu) çalıştırdım ve sıfırlama işlevimde yüksek bir yüzde gösteriyorum (sıfırlama işlevi çerçeve başına çalışır). programları şuna benzer:vektör :: clear() maliyeti çok fazla zaman mı?
Init Bölümü:
std::vector<std::vector<int>> VecOfVecOfPath;
VecOfVecOfPath.resize(20);
for(int i=0; i<20; i++) VecOfVecOfPath.reserve(640);
VecOfVecOfPath diğer işlevleri tarafından bulunan yolun dizisidir. VecOfVecOfPath [i], çerçeve başına yürütme sırasında doldurulacaktır. E.g. Diğer işlevler tarafından push_back
-ed ve çerçeve başına kullanmadan önce sıfırlanır.
sıfırlama işlevi:
void Reset()
{
for(int i=0; i<20; i++) VecOfVecOfPath[i].clear();
}
Yani sıfırlama çok basittir, ancak profilcisine içinde oldukça yüksek bir sıralama var.
Bu yaygın mıdır? Vektör :: clear() dahili tip vektörler için bile böyle genel giderler var mı?
Teşekkürler!
Programı serbest bırakma modunda oluşturmayı denedim ve maliyeti neredeyse sıfıra düşürdüm. % 12 - 13% - 0.03 ~ 0.04%.
Daha sonra kaynak koduna gittim ve hata ayıklama modunda ek işlemleri gerçekleştiren ITERATOR_DEBUG_LEVEL gibi tanımlamalar var.
Bu yüzden @ noggin182'nin önerildiği gibi, Hata Ayıklama ve Serbest Bırakma modunda işler farklıdır.
Alıntı: "Meke Eğer yayın oluşturma profilleme ve performansını artırmak için ayarlanmış tanımlayan koşullu herhangi önişlemci olup olmadığını görmek için arama emin - 15:32 noggin182 3 Ocak." Bu ne olduğuna bağlı
Gereksiz yere temiz aradığınızı düşündünüz mü? –
@parapurarajkumar - benim için de ilk ortaya çıkan şey. Sanırım, 'VecOfVec' kullanımı ile ilgili daha fazla bilgiye ihtiyacımız var - belki Vec'ler açıklığı önlemek için geri dönüştürülebilir. –
vektörünün vektörü nedir? –