プログラムでいくつかのパフォーマンスの問題を観察した後、プロファイリング セッションを実行することにしました。結果は、採取されたサンプルの 87% 程度が何らかの形で私のUpdate()
機能に関連していることを示しているようです。
この関数では、 72 に等しい のリストを調べ、処理後にそれらを削除しますA*
。sizeof(A)
void Update()
{
//...
for(auto i = myList.begin(); i != myList.end(); i++)
{
A* pA = *i;
//Process item before deleting it.
delete pA;
}
myList.clear();
//...
}
myList はstd::list<A*>
です。平均して、リストに平均 5 つの項目が含まれている間、この関数を 1 秒あたり 30 ~ 60 回呼び出しています。つまり、A
1 秒あたり 150 から 300 個のオブジェクトを削除しているということです。
ほとんどの場合、delete を何度も呼び出すだけでパフォーマンスの問題が発生するでしょうか? 関数内で問題が発生している場所を正確に追跡する方法はありますか? 削除は一般的に高価な操作と見なされますか?