2012-07-23 50 views
0

我在Windows WPF C++/C#64位應用程序中搜索性能問題。在調試器(包括使用調試堆運行)下運行時,該應用程序有時非常慢,需要幾秒鐘來響應每次點擊。在慢速期間,MSVS分析器將UMThunkStubAMD64報告爲做功最多的功能(25%獨佔樣本)。這個名字聽起來像是某種適配器/包裝函數,可能是從64位應用程序代碼調用32位操作系統代碼,但我想知道它是否在執行更多工作,如檢查堆狀態。什麼是UMThunkStubAMD64,它爲什麼會出現瓶頸?

什麼是UMThunkStubAMD64?有沒有影響其性能的因素?

+1

UMThunkStubAMD64是一個處理從本機到託管代碼轉換的thunk。這是25%_inclusive_還是_exclusive_時間?包含的數字可能包括執行託管代碼的所有時間。 – 2012-07-23 18:18:29

+0

這是_exclusive_時間。將更新問題 - 謝謝。 – xan 2012-07-23 18:31:57

+0

這個函數的總點擊次數是多少,執行該函數的平均持續時間是多少? – 2012-07-23 18:43:26

回答

1

UMThunkStubAMD64是一個thunk,用於處理從本機到託管代碼的轉換。

如果25%的樣本都在這個thunk中,那麼剖析器很可能只是分析本機代碼。如果是這樣,當託管代碼執行時所採用的任何樣本都將顯示在堆棧中最後一個本地框架的桶中,這將是本地託管的thunk。因此,25%將意味着(大約)25%的運行時間用於執行託管代碼。

thunk本身應該非常快:本機代碼和託管代碼之間的轉換不是免費的,但程序也不應該花費25%這樣做。有可能提出一個花費大量時間過渡的人爲的例子,但我猜想在實際代碼中不太可能遇到這樣的情況。