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 *> > >
インライン化されていないのはイテレータ操作であり、この大きな違いを引き起こしていると思います。これを改善する方法はありますか?ソースコードを1行ずつステップ実行し、すべての変数値を確認できる限り、リリースモードでデバッグできます。