2009-05-05 163 views
4

约30分钟后,我的WPF应用程序使用高CPU使用率,然后我打破了应用程序,找出哪些代码花费高CPU使用率,但我什么都没有。如何减少WPF应用程序的CPU使用率?

Visual Studio 2008中不能显示当前运行的代码,但我发现这个在“调用栈”面板:

 
[In a sleep, wait, or join] 
mscorlib.dll!System.Threading.WaitHandle.WaitAny(System.Threading.WaitHandle[] waitHandles, int millisecondsTimeout, bool exitContext) + 0x8f bytes 
System.dll!System.Net.TimerThread.ThreadProc() + 0x2f9 bytes  
mscorlib.dll!System.Threading.ThreadHelper.ThreadStart_Context(object state) + 0x66 bytes 
mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state) + 0x6f bytes  
mscorlib.dll!System.Threading.ThreadHelper.ThreadStart() + 0x44 bytes 

这是什么?高CPU使用率有什么问题? 以及如何降低CPU使用率?

+0

我使用性能剖析了WPF工具来发现哪些事件或元素采取的CPU使用率很高,后来我们发现:蜱(TimeManager.Tick())是大约40%的CPU使用率的应用程序。哪些事件会调用TimeManager.Tick?如何减少它? – 2009-05-12 06:44:05

回答

4

我们使用了“WPF性能分析工具”/ Visual Profile来找出哪些事件占用了大部分的CPU资源。 Tick(TimeManager.Tick())占用了大约40%的CPU使用率。然后我们逐个删除所有动画控件,最后,我们发现故事板会在大约30分钟后增加CPU使用率。

那么我们就改变形式:


calendarStoryboard.Begin(txtMessage, HandoffBehavior.Compose, true); 


calendarStoryboard.Begin(txtMessage, HandoffBehavior.SnapshotAndReplace, true); 

这个问题是固定的。有关的HandoffBehavior的更多信息,请参阅MSDN:

http://msdn.microsoft.com/en-us/library/system.windows.media.animation.handoffbehavior.aspx

0

我不是WPF专家,但您在此处展示的调用堆栈可能不是您的问题。该线程正在等待其他同步对象,并且没有做任何工作。 VS无法显示运行代码的原因是因为它在本地代码中等待(一旦你调用WaitAny()我相信你会调用一个本地OS构造来实现等待)。

是否有任何其他线程在您的WPF过程中运行,可能会占用CPU时间?

+0

我没有找到任何其他正在运行的线程,每当我打破应用程序,我得到这个消息“[在睡觉,等待,或加入...” – 2009-05-05 15:18:54

1

你应该看看其他线程,我认为显示线程的切换位于visual studio的调试菜单中。 “[在睡眠中,等待或加入”意味着线程无法执行任何操作,因为它正在等待另一个线程完成操作。

它可能会被卡在无限循环的某个地方,无论是有意或无意(例如某些UI事物不断重绘,如动画或其他东西)无论它是什么,它都不在当前线程显示在堆栈中。

+0

我如何找到“另一个线程”? – 2009-05-05 15:15:50

+0

调试 - > Windows - >线程,但我认为它不适用于VS的Express版本,如果这是你正在使用 – Davy8 2009-05-05 15:34:10

+0

我看到“线程”面板后,我打破了应用程序,一个主线程和其他线程,这些都没有命名。在代码中创建的所有线程都已命名。 – 2009-05-06 01:36:01

1

您有一些选项可用于追踪您的问题。我将从Visual Studio 2008中的Performance Wizard开始。您可以在Analyze菜单上找到它。

+0

该功能仅适用于Team Foundation System吗? – kevindaub 2009-05-15 03:16:47

相关问题