Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is this code 100 times slower in debug?

I'm using MSVC 2010.

I'm trying to remove duplicate (without keeping any of them) from a list

Why is this code 100 times slower in debug mode?

Is there any other way to remove all objects that are equivalent and make it faster in debug mode?

It is to the point I can't use debug at the moment. It take minutes to process while few seconds in release.

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++;
                }
            }
        }
    }
}
like image 448
Pat Avatar asked Sep 27 '12 23:09

Pat


People also ask

Does code run slower in debug mode?

debug code runs a lot slower than release - Visual Studio Feedback.

Why is Release faster than debug?

Lots of your code could be completely removed or rewritten in Release mode. The resulting executable will most likely not match up with your written code. Because of this release mode will run faster than debug mode due to the optimizations.

Is Release version faster than debug?

An APK compiled with Release mode is optimized and much faster but you cant use debug/breakpoint etc... Release version is faster, even 3 times faster, depends on many different factors...


1 Answers

In general, STL is very slow while debugging in Visual Studio due to the iterator debugging support. You can speed this up dramatically by setting _HAS_ITERATOR_DEBUGGING to 0.

like image 157
Reed Copsey Avatar answered Sep 21 '22 08:09

Reed Copsey