std::map のパフォーマンスに問題があります。私の C++ プロジェクトには、GUIObject
s も含むWindow
s のリストがあります。for
次のように、すべてをループで描画します。
unsigned int guiObjectListSize = m_guiObjectList.size();
for(unsigned int i = 0; i < guiObjectListSize; i++)
{
GUIObject* obj = m_guiObjectList[i];
if(obj->getParentId() < 0)
obj->draw();
}
この場合、プロジェクトを実行すると、スムーズに動作します。4 つのウィンドウと、ボタンなどの他のコンポーネントがいくつかあります。
しかし、ウィンドウの描画を個別に処理したいので、変更後、私のコードは次のようになります。
// Draw all objects except windows
unsigned int guiObjectListSize = m_guiObjectList.size();
for(unsigned int i = 0; i < guiObjectListSize; i++)
{
GUIObject* obj = m_guiObjectList[i];
if((obj->getParentId() < 0) && (dynamic_cast<Window*>(obj) == nullptr))
obj->draw(); // GUIManager should only draw objects which don't have parents specified
// And those that aren't instances of Window class
// Rest objects will be drawn by their parents
// But only if that parent is able to draw children (i.e. Window or Layout)
}
// Now draw windows
for(int i = 1; i <= m_windowList.size(); i++)
{
m_windowList[i]->draw(); // m_windowList is a map!
}
std::map<int, Window*>
s のz インデックスをマップ内の sWindow
として設定する必要があるため、を作成しました。key
しかし問題は、このコードを実行すると非常に遅いことです。4 つのウィンドウ (マップ サイズは 4) しかありませんが、fps レートが非常に低いことがわかります。そのようなカウンターをまだ実装していないため、正確な数は言えません。
このアプローチが非常に遅い理由を誰か教えてもらえますか?