2


1

std :: map clear()デバッガーのパフォーマンス?
接続された簡単なテストプログラムは、単純なstd

mapを空にするパフォーマンスをテストします。 MSVC 2008および2010を使用すると、コマンドプロンプトから実行した場合、デバッグビルドは<30秒かかりますが、デバッガー内から実行した場合、ほぼ3分かかります。 clear()の呼び出しは、違いの完全な原因です。 デバッガーに侵入すると、コールスタックは常にHeapFreeを指します。 +質問:なぜ大きな違いがあるのですか? デバッガで実行したときに高速になるように、デバッグヒープ設定を何らかの方法で変更できますか?

#include

int
main ( int, char )
{
    std::map< time_t, double > test;
    for ( int i = 0; i < 1000000; ++i )
    {
        test[i] = i / 3.14;
    }
    test.clear();
    return 0;
}

2 回答


5


プログラムの初期環境で環境変数_NO_DEBUG_HEAP = 1を設定しようとしています。 これにより、Windowsの内部デバッグヒープが無効になり、メモリ破損の問題のデバッグが困難になる場合があります。

このhttp://support.microsoft.com/kb/929136[KB記事]にはフラグが記載されており、その環境変数なしでデバッガーでプログラムを実行すると、デフォルト(低フラグメンテーションヒープ)が無効になると推測できます。 このhttp://mackeblog.blogspot.com/2009/02/disabling-visual-studios-debugger-heap.html [ブログ投稿]も参照してください。デバッグヒープがプログラムを3〜5倍遅くする方法について説明しています。


2


デバッガーは、安全性をチェックする多くのイテレーターを追加します。 イテレータチェックは `_HAS_ITERATOR_DEBUGGING = 0`フラグで無効にできますが、お勧めしません。 詳細については、http://choorucode.wordpress.com/2010/09/10/visual-c-iterator-checks-and-slow-stl-code/ [this]ブログエントリを参照してください。

編集:

以下への応答では、情報を収集するアプリケーションへのデバッグフックがあり、コードを監視するデバッガー内のスタックまたは他のプロセスを評価できます。 ここで推測しているのは、インストールしたアドオンがわからないからです。 ただし、コマンドラインからは、デバッグ以外の実行可能ファイルを使用できます。 私は自分でその間違いを犯しましたが、それは簡単です。