簡體   English   中英

Visual Studio 2008 Profiler - Instrumented會產生奇怪的結果

[英]Visual Studio 2008 Profiler - Instrumented produces strange results

我在我的應用程序的“RelDebug”版本上運行Visual Studio 2008探查器。 優化已啟用,但內聯僅適中,存在堆棧幀,並且會發出符號。 換句話說,RelDebug是一個可以調試的有點優化的構建(盡管通常的發布會有關檢查變量的注意事項適用)。

我在不同的運行中運行Sampling和Instrumented profiler。

結果? 采樣分析器產生的結果看起來合理。 但是,當我查看Instrumented profiler結果時,我看到的功能甚至不應該在列表的頂部附近,而且最終會出現。

例如,像“SetFont”這樣的函數,它只包含1行,將高度分配給類成員。 或者只是指定一個矩形的“SetClipRect”。

當然,我正在看“獨家”統計數據(即減去兒童)。

這發生在其他人身上嗎? 一旦我的應用程序增長到一定的大小,它似乎總會發生。 這使得儀表化的分析器在那時毫無用處。

我解決了這個問題。 Visual Studio 2008和Visual Studio 2010分析器都是平庸的(禮貌地說)。 我買了帶有vTune放大器(一個分析器)的英特爾C ++ Studio。 在完全相同的代碼上使用英特爾®探查器,我能夠獲得真正有意義的探查器結果。

你說“當然你在看獨家”。 看看包容性統計數據。 除了最簡單的程序或算法之外,幾乎所有的時間都花在子程序和函數上,所以如果你遇到了性能問題,那么很可能是你不知道的時間長的電話。

我依賴的方法就是這個 假設你試圖找出你可以解決的問題,以使代碼更快,它會找到它,而不是浪費你的時間與高精度的統計數據有關的問題。

沒有錯誤。 抽樣不能告訴你每次通話花了多少時間。 Profiler只計算計時器在該特定功能中結束的次數。 由於不經常調用SetFont,因此您不會在該函數中獲得很多匹配,並且您會覺得該函數不耗時。

另一方面,當您運行檢測時,分析器會計算每個調用並測量每個函數的執行時間。 這就是您獲得有關CPU消耗功能的准確信息的原因。

在檢查檢測結果時,您還必須始終查看調用次數。 由於SetFont是更少的API,因此無論是獨占還是包容都無關緊要。 唯一重要的是它的整體時間以及它的調用頻率。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM