我遇到了一个问题,即 Win32 应用程序在调试和发布版本之间存在巨大的性能差异。发布需要 20 秒,而调试构建需要 6 分钟来初始化应用程序。这很痛苦,因为在调试时,在开始做任何事情之前进行初始化总是需要 6 分钟。所以我正在寻找一种方法来调整调试构建中的性能。
运行分析器后,我发现下面的代码是热点。
class CellList {
std::vector<CellPtr>* _cells;
iterator begin() { return (*_cells).begin(); }
iterator end() { return (*_cells).end(); }
reverse_iterator rbegin() { return (*_cells).rbegin(); }
reverse_iterator rend() { return (*_cells).rend(); }
...
}
CellList _cellList = ...;
for (CellList::iterator itr = _cellList.begin(), end = _cellList.end(); itr < end; ++itr) {
Cell* cell = *itr;
if (cell->getFoo()) cell->setBar(true);
else cell->setBar(false);
}
for (CellList::iterator itr = _cellList.rbegin(), end = _cellList.rend(); itr < end; ++itr) {
Cell* cell = *itr;
if (cell->getFoo2()) cell->setBar2(true);
else cell->setBar2(false);
}
这些是时基剖面结果中的热点。
std::operator< <std::_Vector_iterator<Cell *,std::allocator<Cell *> >,std::_Vector_iterator<Cell *,std::allocator<Cell *> > >
std::_Vector_const_iterator<Cell *,std::allocator<Cell *> >::operator<
std::reverse_iterator<std::_Vector_iterator<Cell *,std::allocator<Cell *> > >::operator*
std::reverse_iterator<std::_Vector_const_iterator<Cell *,std::allocator<Cell *> > >::reverse_iterator<std::_Vector_const_iterator<Cell *,std::allocator<Cell *> > ><std::_Vector_iterator<Cell *,std::allocator<Cell *> > >
我猜这是迭代器操作没有被内联并导致这种巨大的差异。有什么办法可以改善这一点吗?只要仍然可以在源代码中逐行检查并检查所有变量值,我就可以在发布模式下进行调试。