在观察了我的程序中的一些性能问题后,我决定运行一个分析会话。结果似乎表明,大约 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*>
. 平均而言,我每秒调用此函数 30 到 60 次,而列表平均包含 5 个项目。这意味着我A
每秒要删除 150 到 300 个对象。
在大多数情况下,多次调用 delete 是否足以导致性能问题?有什么方法可以准确追踪问题发生在函数的哪个位置?删除通常被认为是一项昂贵的操作吗?