我在程序中运行了一个分析器(非常困倦),并且在我的重置功能(重置功能每帧运行)上显示出很高的百分比。 的程序是这样的:vector :: clear()花费那么多时间?
INIT部分:
std::vector<std::vector<int>> VecOfVecOfPath;
VecOfVecOfPath.resize(20);
for(int i=0; i<20; i++) VecOfVecOfPath.reserve(640);
VecOfVecOfPath是一系列路径的其他功能找到。 VecOfVecOfPath [i]将在每帧执行期间填充。 例如它由其他功能执行,并在每帧使用之前复位。
复位功能:
void Reset()
{
for(int i=0; i<20; i++) VecOfVecOfPath[i].clear();
}
所以重置很简单,但它确实有一个分析器相当高的排名。
这是常见的吗? vector :: clear()是否甚至对于内置类型向量也有这样的开销?
谢谢!
我试着在发布模式下构建程序,然后成本降低到几乎为零。 从12〜13%到0.03〜0.04%。
然后我去了源代码,并有像ITERATOR_DEBUG_LEVEL定义在调试模式下影响额外的操作。
所以它就像@ noggin182建议的一样,在调试和发布模式下情况有所不同。
引用:“Meke确保在发布版本的分析和搜索,看看是否有任何预处理条件定义设置以提高性能 - noggin182 1月3日在15:32。”
你认为你是不必要地调用'clear'吗? – 2012-01-03 14:51:42
@parapurarajkumar - 我的第一件事也发生在我身上。我想我们需要更多关于'VecOfVec'的使用细节 - 也许Vecs可以回收以避免明显。 – 2012-01-03 14:56:57
向量的矢量是什么? – 2012-01-03 14:57:06