某些函数调用未显示在 VTune 中

Certain function calls not showing up in VTune

我发现有些代码非常慢(将 10 秒的应用程序变成 60 秒的应用程序)。我使用 "randomly pause the application and see where it is" 技巧找到了慢速代码。慢速代码位于检查许可证服务器是否有有效许可证的第 3 方许可函数调用中。

当我尝试使用 Intel 的 VTune 放大器进行性能分析时,这个缓慢的函数调用并没有显示出花费太多时间。我不确定为什么,但我猜函数调用必须在等待许可证服务器响应或类似的东西时休眠,这会诱使 VTune 不将其识别为瓶颈。有没有办法让 VTune 识别这样的调用?

通过使用 Locks and Waits 分析模式而不是 Basic Hotspots 分析模式,我能够让它显示出来。使用 Locks and Waits,我可以看到 select 函数是我最常阻塞的调用之一,我可以将该调用回溯到我的应用程序代码中以查看它是如何运行的接到电话。