Ich habe versucht herauszufinden, warum es so lange dauert, unser Programm im Debugging-Modus zu debuggen. Nach der Verwendung von xperf, um zu sehen, wie die Stacks aussahen, war es offensichtlich, dass wir einen großen Teil unserer Zeit in den Iterator und die STL-Container investierten. Ich googeln dies für eine Weile und fand die OptionenWarum verursachen Iteratoren in VS2010 ein sehr langsames Debuggen, obwohl _HAS_ITERATOR_DEBUGGING, _SECURE_SCL, _SECURE_SCL_THROWS auf 0 gesetzt sind 0
_HAS_ITERATOR_DEBUGGING=0
_SECURE_SCL=0
_SECURE_SCL_THROWS=0
Und ich brachte alle diejenigen in Code mit einer #define
#define _HAS_ITERATOR_DEBUGGING 0
#define _SECURE_SCL 0
#define _SECURE_SCL_THROWS 0
Aber das schien nicht zu arbeiten, so ist, dann habe ich versucht, es zu benutzen die Präprozessor-Definitionen innerhalb des Visual Studio-Projekts, aber das schien immer noch nicht zu helfen.
Ich habe fast jede mögliche Permutation ausprobiert, einschließlich der Einstellung in den Headern und nach all den Includes, aber egal was ich mache, ich sehe keine Leistungssteigerung während des Debuggens. Um ein Beispiel zu geben, benötigt diese Reihe von Operationen im Freigabemodus ungefähr 140 Sekunden. Im Debug-Modus dauert es etwas über 2400 Sekunden. Etwa 17- bis 18-fache Verlängerung der Verarbeitungszeit.
Einige zusätzliche Informationen, der Prozess, der diese C++ - DLLs hostet, ist ein C# .net 4-Prozess, und ich habe das Debuggen nicht verwalteten Codes aktiviert. Im Grunde alle Prozess lädt es die DLLs für uns. Die ganze wirkliche Arbeit wird im C++ Code erledigt.
Ich habe die vollständige Compiler-Befehlszeile darunter eingefügt.
/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
Irgendwelche Ideen, warum das so langsam wäre wie es ist?
Es ist ein Debug-Build; Es ist zum Debuggen gedacht, nicht zur Leistung. Es soll sicherstellen, dass Ihr Code funktioniert. –
Iterator-Debugging ist nicht * das * langsam. Es ist wahrscheinlicher, dass der Code nicht optimiert wird. Die Problemumgehung ist einfach. Verwenden Sie nur kleinere Datasets, um Ihren Code zu überprüfen. Die Wahrscheinlichkeit, dass Sie einen Fehler mit hundert Mal mehr Daten ausgleichen, ist nicht so toll. –