为什么这段代码在调试时要慢100倍?

时间:2012-09-27 23:35:31

标签: c++ visual-c++ stl

我正在使用MSVC 2010。

我正在尝试从列表中删除重复(不保留任何副本)

为什么这个代码在调试模式下慢100倍?

还有其他方法可以删除所有等效的对象并在调试模式下加快速度吗?

目前我无法使用调试。在发布的几秒钟内处理需要几分钟。

void SomeFunction()
{
    std::list<Something> list;
    std::list<Something>::iterator it1;
    std::list<Something>::iterator it2;

    for (it1 = list.begin(); it1 != list.end(); it1++)
    {
        for (it2 = list.begin(); it2!=list.end(); it2++)
        {
            if (it1->SomeValue() == it2->SomeValue())
            {
                if (it1 != it2)
                {
                    list.erase(it1);
                    list.erase(it2);

                    it2 = list.begin();
                    it1 = it2++;
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:17)

通常,由于iterator debugging support,在Visual Studio中调试时STL非常慢。通过将_HAS_ITERATOR_DEBUGGING设置为0,您可以大大提高速度。