7

Pierwsza faza mojego programu ładuje znaczące ilości danych do kontenerów STL. Odkryłem, że minęło kilka minut, zanim mogłem dosięgnąć prawdziwego mięsa z mojego programu.Jakie są negatywne konsekwencje wyłączenia sterty debugowania? (_NO_DEBUG_HEAP == 1)

Po pewnym wyszukiwaniu okazało się, że mogę ustawić _NO_DEBUG_HEAP == 1 w mojej VS2012 Właściwości konfiguracji-> Debugowanie-> Zmienna środowiskowa ... wyłączając wykorzystanie sterty debugowania systemu Windows. To dało mi 10-krotną poprawę szybkości debugowania. Nie znalazłem jeszcze żadnego opisu, jakie funkcje debugowania tracę, robiąc to.

Podsumowując: jakie kontrole zostały ukończone i jakie informacje z debugowania były generowane przy użyciu sterty debugowania systemu Windows?

Dziękuję.

+0

Nie musiałem debugować heisenbug stosu od ostatnich 5 lat, dzięki stosowi debuggera. Oddaj to tylko, jeśli masz plecy do ściany. Rozważ: _HAS_ITERATOR_DEBUGGING = 0. I oczywiście debuguj tylko przy użyciu zdrowego zestawu danych. –

Odpowiedz

3

debug wpływ kupie wydajność na dwa sposoby:

Po pierwsze, to dodaje kontroli integralności podczas operacji sterty sterty. Nie znalazłem szczegółów na temat tych kontroli, ale zakłada się, że przy każdej alokacji lub bezpłatnie, wymaga to sprawdzenia integralności struktur danych używanych do zarządzania stertą.

Po drugie, wyłącza opcję sterty o niskiej fragmentacji (LFH). W kompilacji wydania domyślnie otrzymujesz LFH. W kompilacji debugowania nie musisz - chyba że używasz _NO_DEBUG_HEAP. Niekoniecznie jest to kara za szybkość, ale może tak być.

Istnieją wskazówki w dokumentacji dla HeapSetInformation.

Należy pamiętać, że biblioteki uruchomieniowe języka C i C++ zapewniają zarządzanie pamięcią zbudowane na wierzchu interfejsów systemowych API, a ponadto mają tryby debugowania i nie debugowania, które mogą wpływać na wydajność. Jest more detailed documentation o tym, co robi debugujący CRT. Możesz sprawdzić i zobaczyć, czy wyłączenie debugowania CRT wystarczy, aby uzyskać znaczący wzrost wydajności bez mieszania się z trybem debugowania stosu procesowego.

Powiązane problemy