我正在制作一个在桌面上滚动信息的应用程序。 window 是透明的。我从简单开始,尝试找到动画效果的最低 CPU 使用率,并从一个简单的 TextBlock 开始。
在我的开发机器上,通过 DoubleAnimation 设置 Canvas.Left 属性,我在屏幕上获得了非常流畅的动画。然而,在另一台 Vista 计算机上,我每 6 到 7 秒就会出现大约 1 秒的延迟。在 XP 机器上,它又相当流畅。我在其他 3 台机器上尝试过,好坏各占 50%。我在所有机器上都安装了 3.5 SP1。
系统上的 CPU 使用率永远不会超过 10%。我可以看到我没有进行任何软件渲染。我桌面上的显卡是 nVidia Geforce 7xxx 系列,其中一台不稳定的机器使用的是 nVidia Geforce 88xx 卡。所有驱动程序都使用相同的最新版本。屏幕分辨率通常为 1920x1080,但我的开发机器除外,它要大得多(2560x1600)
但是 - 如果我使用 Perforator 禁用脏区域支持 - 它在所有机器上都很顺利,但 CPU 现在为 30%
我迷路了。波动几乎就像发条一样。出现问题的机器上没有发生任何其他事情,所有测试的机器都是 Core 2 Duo,充足的内存,最新的驱动程序,最新的服务包,我只是不知道还能做什么。我希望只是更高的 CPU 使用率,而不是滞后。
最佳答案
如果您使用AllowsTransparency 属性,您将会遇到性能和兼容性问题。
技术说明在这里:
http://blogs.msdn.com/dwayneneed/archive/2008/09/08/transparent-windows-in-wpf.aspx
根据我个人(痛苦的)经验,当你在屏幕上长时间显示 WPF 透明窗口时,一些显示驱动程序会破坏你的程序,而其他显示驱动程序会使 Windows 工作不稳定,我建议你尝试重新编写你的 GUI不使用透明度。
关于.net - 奇怪的断断续续的 WPF 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/313003/