我刚刚下载了ANTS Performance Profiler from Red Gate的试用版,并正在研究团队的一些代码。我立即注意到,ANTS报告有一段特定的代码占用了多达99%的CPU时间。
我完全不熟悉ANTS或总体上的性能分析(也就是说,除了使用我确定是极其粗糙和皱着眉头的方法(例如double timeToComplete = (endTime - startTime).TotalSeconds
)进行自我分析之外,因此我仍在摆弄应用程序和弄清楚它的用法。但是我确实调用负责相关代码的开发人员,他的立即 react 是“是的,它说了这一点并不令我感到惊讶;但是该代码调用了SignalAndWait [感谢ANTS我可以亲自看到它,”不使用任何CPU,它只是坐在那里等待做某事。”他建议我不要理会该代码,而是寻找我能找到的其他东西。
我的问题是:SignalAndWait是否确实不需要CPU开销(如果这样,这怎么可能?),性能分析器将其视为占用了99%的CPU时间是否合理?我觉得这特别奇怪,因为如果达到99%,这表明我们的应用程序经常处于空闲状态,不是吗?然而,最近它的性能已经变得相当呆滞。
就像我说的那样,我真的只是这个工具的初学者,而且我对WaitHandle类一无所知。因此,任何帮助我了解此处发生情况的信息将不胜感激。
最佳答案
WaitHandle确实确实使您的线程进入休眠状态。
额外的好处是您可以在这些句柄上设置超时,以便它们可以在一段时间后唤醒。
您还可以从另一个线程(例如,应用程序退出等)向WaitHandle发出信号,然后它们立即唤醒。
我个人更喜欢具有短超时的WaitHandle而不是具有相同超时的Thread.Sleep,因为启动Sleep时必须先返回它,然后才能恢复操作,而需要时可以立即恢复WaitHandle。
关于.net - 出于性能分析的目的,可以忽略对WaitHandle.SignalAndWait的调用吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1034654/