デバッグ モードでプログラムのデバッグに時間がかかる理由を突き止めようとしています。xperf を使用してスタックの様子を確認したところ、イテレータと STL コンテナに膨大な時間を費やしていることが明らかになりました。私はこれをしばらくグーグルで検索し、オプションを見つけました
_HAS_ITERATOR_DEBUGGING=0
_SECURE_SCL=0
_SECURE_SCL_THROWS=0
そして、#define を使用してコードでそれらすべてを設定します
#define _HAS_ITERATOR_DEBUGGING 0
#define _SECURE_SCL 0
#define _SECURE_SCL_THROWS 0
しかし、それはうまくいかないようだったので、ビジュアルスタジオプロジェクト内のプリプロセッサ定義を使用して試しましたが、それでも役に立たないようでした.
ヘッダーに設定するなど、考えられるほぼすべての順列を試しましたが、すべてのインクルードの後、何をしても、デバッグ中のパフォーマンスの向上は見られません。一例を挙げると、リリースモードで実行すると、この一連の操作に約 140 秒かかります。デバッグ モードでは、2,400 秒強かかります。処理時間が約 17 ~ 18 倍増加します。
追加情報として、これらの C++ dll をホストするプロセスは C# .net 4 プロセスであり、アンマネージ コードのデバッグを有効にしました。基本的に、すべてのプロセスで DLL が読み込まれます。実際の作業はすべて C++ コードで行われます。
以下に完全なコンパイラ コマンド ラインを含めます。
/I"..\CommonInclude" /Zi /nologo /W4 /WX /Od /Oy- /D "_CRT_SECURE_NO_WARNINGS" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_USRDLL" /D "ENGINE_EXPORTS" /D "_HAS_ITERATOR_DEBUGGING=0" /D "_SECURE_SCL=0" /D "_SECURE_SCL_THROWS=0" /D "_VC80_UPGRADE=0x0710" /D "_WINDLL" /D "_MBCS" /Gm- /EHa /MDd /GS /fp:precise /Zc:wchar_t- /Zc:forScope /GR /Yu"StdAfx.h" /Fp".\Debug/Foo.pch" /Fa".\Debug/" /Fo".\Debug/" /Fd".\Debug/" /Gd /analyze- /errorReport:queue /EHa -Zm350 /MP3
これがこれほど遅い理由は何ですか?