2011-03-24 75 views
0

我在Visual Studio 2010的64位Windows 7上使用32位GLUT。該項目只包含我的C++實現和頭文件。沒有Win32特定的代碼。爲什麼_mainCRTStartup在調試時如此緩慢,但快速關閉調試?

我做了很多像素繪製操作。它是發佈配置的即時版本,但調試配置非常慢(至少需要5秒)。我注意到當我吸引更多時,它會減慢速度。所以我想,簡介它。

Visual C++分析器說100%的時間花費在_mainCRTStartup之間(我猜這是四捨五入的)。我知道這是C運行時間,但是什麼導致它在調試配置中運行得如此緩慢?在調試和發佈配置中,等效的C代碼同樣是瞬時的。 C++中有什麼特別的東西讓_mainCRTStartup花費更長的時間?

編輯:顯然我忽略了一件事:在_mainCRTStartup框架下,有一個對Unknown frame(s)的引用。我認爲這是main()及其子女的功能。我無法實際分析我編寫的函數,無論是在調試還是發佈中。我在哪裏追求?

+4

'_mainCRTStartup'調用'main' - 我猜測100%是main()從開始到結束這顯然是您的整個運行時間;-) – Cameron 2011-03-24 22:37:02

+0

有趣。感謝那個珍聞。說得通。 但沒有解釋5秒的滯後。 ( – johansson 2011-03-24 22:38:26

+1

)如果你想知道需要花費多少時間(儘管關心調試的性能有點無用),你需要減少粗略的時間。說100%的時間是由啓動代碼(調用' main()')是微不足道的,沒有信息。 – GManNickG 2011-03-24 22:42:15

回答

0

什麼_mainCRTStartup「獨佔%樣本」?包容性樣本對這個程序毫無價值。

1

調試器可能無法找到您使用的DLL的.pdb文件。首先要做的是檢查你的符號服務器設置。工具+選項,調試,符號。取消選中符號文件位置,然後重試。

+0

謝謝。看起來好像什麼都沒有檢查。 – johansson 2011-03-25 00:50:36

+0

在main()方法上設置一個斷點。按下F5後需要多長時間才能到達? – 2011-03-25 01:36:55

+0

這是非常瞬時的,我只是做了經典的毫秒比較。看起來問題在繪圖函數中,在發佈配置中,調試配置需要93 ms,它需要3884 ms,Visual C++在'_mainCR之後仍然看不到更多的幀TStartup'。雖然93毫秒是非常好的表現,但我仍然想知道哪些是最昂貴的通話和所有通話。謝謝! – johansson 2011-03-25 01:40:31

0

_mainCRTStartup是調用main的主要功能。所以是的,對於每個程序,100%的時間都花費在該功能中 - 因爲它調用了所有其他功能。

你正在分析調試模式?爲什麼?

+0

因爲與發佈版本相比,啓動速度非常慢。在調試和發佈時,它也比C等價物慢。我假設_mainCRTStartup也被稱爲C等價物。那麼爲什麼C在調試模式下比C++快得多呢? 另外,我可能應該在問題中提到它。但顯然_mainCRTStartup具有未知的幀。我假設幀是我的main()和最終調用的函數。但它們不會出現在探查器中。我將編輯該問題。 編輯:Grr,我忘了轉移+輸入。 – johansson 2011-03-25 00:52:51