我正在使用VS2010內置profilier 我的應用程序包含三個線程。 線程的一個非常簡單:爲什麼「最獨立工作的功能」的總和不能超過100%?
while (true)
if (something) {
// blah blah, very fast and rarely occuring thing
}
Thread.sleep(1000);
}
Visual Studio的報告說的Thread.sleep需要的節目時間的36%。 問題是「爲什麼不〜100%的時間?」爲什麼Main
方法佔用了40%的時間,我肯定是在這個方法中從頭到尾執行應用程序。
做探查devides結果的線程數?
在我的另一個線程上,我發現該方法佔用了34%的時間。 這是什麼意思?這是否意味着它只能在34%的時間內工作,或者幾乎可以一直工作?
在我看來,如果我有三個線程並行運行,並且如果我總結方法時間,我應該得到300%(例如,如果應用程序運行10秒,例如,這意味着每個線程運行10秒,如果有3個線程 - 它會在30秒完全)
profilier儀器代碼測量進入和退出的功能時,這些輪廓儀認爲Thread.sleep代碼(1000)需要1秒。 Thread.Sleep(1000) – javapowered
內部會發生什麼並不重要。剛剛測試過類似的代碼。如果使用檢測,我預計在Thread.Sleep()中有99.9%。將嘗試一些額外的線程。 –
@javapowered:顯然,你是對的。 VS分析器將結果標準化爲100%。當我用'new Thread(()=> {while(x == 0)Thread.MemoryBarrier();})添加第二個線程時,Start()的結果變成了47%和53%之間的匿名lambda(顯然它是線程的例程)和'Thread.Sleep()'。 –