什么是UMThunkStubAMD64,为什么它似乎是一个瓶颈?

时间:2012-07-23 18:13:29

标签: c# c++ windows

我正在Windows WPF C ++ / C#64位应用中搜索性能问题。在调试器(包括运行调试堆)下运行时,应用程序有时非常慢,需要几秒钟才能响应每次点击。在慢速期间,MSVS探查器报告UMThunkStubAMD64作为执行最多工作的功能(25%独占样本)。这个名称听起来像是某种适配器/包装器功能,可能是从64位应用程序代码调用32位操作系统代码,但我想知道它是否正在做更多的工作,比如检查堆状态。

什么是UMThunkStubAMD64?是否存在影响其性能的因素?

1 个答案:

答案 0 :(得分:1)

UMThunkStubAMD64是一个处理从本机代码到托管代码的转换的thunk。

如果25%的样本都在这个thunk中,那么分析器很可能只是分析本机代码。如果是这样,当托管代码执行时获取的任何样本将显示在堆栈中,用于堆栈上的最后一个本机帧,这将是托管代码的本机。因此,25%意味着(大约)25%的运行时间用于执行托管代码。

thunk本身应该非常快:在本机代码和托管代码之间进行转换不是免费的,但程序也不应该花费25%这样做。有可能想出一个花费大量时间过渡的人为例子,但我猜想在实际代码中遇到这种情况的可能性很小。

相关问题