0

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

UMThunkStubAMD64 是什么?是否有任何因素影响其性能?

4

1 回答 1

1

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

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

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

于 2012-07-24T17:12:38.950 回答