0

我们的前 3 个函数都显示为线程同步对象;大多数WaitForSingleObject().

这个函数是否非常繁重,即使使用 0 调用只是检查线程的状态?非常关注这些函数的值在自时间中显示的时间比它所描述的任何其他值高 2 个数量级。或者也许 Glowcode 只是对这个函数感到害怕,因为当它看起来一大堆时,代码指针恰好在那里。

4

1 回答 1

0

首先,不要看自拍

它存在的唯一原因是因为有人可能会在他们自己的代码中编写花费太多时间在紧密 CPU 循环中的代码。您的程序是否花费所有时间反转矩阵或进行 FFT?

发明gprof的全部原因,以及随之而来的大量分析器,是真正的软件包含大量子程序,它们在大老鼠的巢穴中相互调用,到目前为止,花费太多时间的最简单方法是进行子程序调用这是可以避免的。自拍时间不会暴露那些。

接下来,无论您是查看 Wall 时间还是 CPU 时间,如果 WaitForSingleObject() 大部分时间都处于活动状态,则意味着您的线程主要在等待某些东西。你需要找出什么

有一个非常简单的方法可以找出答案。只需按 Pause、Ctrl-C、Esc 或任何使其停止在轨道上的键,然后查看堆栈。调用堆栈上的每一行代码都代表一个未完成的请求,如果该请求没有发出,程序将不会等待。所以这就是你如何知道它在等待什么。

如果你碰巧在它不在 WaitForSingleObject() 中时抓住了它,请再做一次,也许几次。这似乎比分析更费力,但您可以选择查找问题或做一些简单的事情。

于 2012-04-07T02:58:31.873 回答