Невероятно медленный вызов dtor unique_ptr при подключенном отладчике (msvc)

struct test_struct
{
    test_struct() {}
    ~test_struct() {}
};

#include <vector>
#include <memory>
#include <cstdio>

int main()
{
    printf("ctor begin\n");
    {
        std::vector<std::unique_ptr<test_struct>> test_vec;
        const int count = 100000;

        for (auto i = 0; i < count; i++) {
            test_vec.emplace_back(new test_struct);
        }
        printf("dtor begin\n");
    }
    printf("dtor end\n");
}

Я использую VS2010 и обнаружил нелепую проблему с производительностью. Приведенный выше код хорошо работает как в отладочной, так и в релизной сборке (ctrl+f5), но когда отладчик подключен (f5), вызов dtor для класса unique_ptr невыносимо медленный. Результирующий машинный код довольно оптимизирован, поэтому я не ожидаю, что это проблема компилятора, а не отладчика, но я не знаю, как с этим бороться. Мой вопрос:

  • Можно ли воспроизвести эту проблему на вашем компьютере?
  • В чем причина такого поведения?
  • Есть ли обходной путь?
7
задан summerlight 21 May 2012 в 05:43
поделиться