7

プログラムの初期段階では、大量のデータがSTLコンテナに読み込まれます。プログラムの真髄に到達するまでに数分かかることがわかりました。

いくつか検索した後、VS2012構成プロパティ->デバッグ->環境変数内で_NO_DEBUG_HEAP==1を設定できることがわかりました...Windowsデバッグヒープの使用をオフにします。これにより、デバッグ速度が10倍向上しました。そうすることでどのようなデバッグ機能が失われるのか、まだ説明がありません。

要約すると、Windowsのデバッグヒープを使用して、どのようなチェックが完了し、どのようなデバッグ情報が生成されていたのでしょうか。

ありがとうございました。

4

1 に答える 1

3

デバッグヒープは、次の2つの方法でパフォーマンスに影響を与えます。

まず、ヒープ操作中にヒープの整合性にチェックを追加します。これらのチェックの詳細はわかりませんが、割り当てまたは空きごとに、ヒープの管理に使用されるデータ構造の整合性を検証する必要があると想定されます。

次に、低フラグメンテーションヒープ(LFH)オプションを無効にします。リリースビルドでは、デフォルトでLFHを取得します。デバッグビルドでは、_NO_DEBUG_HEAPを使用しない限り、使用しません。これは必ずしも速度のペナルティではありませんが、そうである可能性があります。

のドキュメントには手がかりがありますHeapSetInformation

CおよびC++ランタイムライブラリは、システムヒープAPI上に構築されたメモリ管理を提供し、パフォーマンスに影響を与える可能性のあるデバッグモードと非デバッグモードも備えていることに注意してください。デバッグCRTの機能に関する詳細なドキュメントがあります。プロセスヒープのデバッグモードをいじることなく、CRTデバッグをオフにするだけで、パフォーマンスが大幅に向上するかどうかを確認できます。

于 2013-03-26T15:57:50.087 に答える