WPF临时显示冻结

时间:2011-04-17 21:07:41

标签: wpf rendering freeze

我有一个在.NET 3.5上运行的独立WPF应用程序。每隔一段时间,显示屏就会冻结几秒钟。这在经常更新某些内容的屏幕上最为明显。 Here is a video显示问题。

显示屏冻结时,界面仍然响应(video)。

我遇到过一些其他类似问题的帖子,这些帖子将其归因于SW / HW渲染问题。为了安全起见,我完全禁用了硬件渲染,但仍然存在问题。

我在冻结期间运行了一个文件监视器,看看是否有一些特殊的文件访问或活动,但没有什么是不寻常的。

最后说明:目标平台是一款小型触摸屏平板电脑,没有太多内存或马力(512 MB)。我只在目标上看到了这个问题,从来没有在我的开发PC上看到它,它在资源方面有更多。

更新

我以为我已经通过删除一些动画代码修复了这个问题,但它没有用。我仍然遇到问题而且我已经走到了尽头。

这是我尝试过的更多内容:

  • 升级到.NET 4.0。同样的行为。
  • 为可以通过DispatcherTimer(在UI线程上调用)调用的所有方法添加了调试代码,以确保它们都没有阻止UI。

我真的很难过,并且增加了赏金。正如我所提到的,问题只发生在目标PC上(link)。

3 个答案:

答案 0 :(得分:2)

当出现这种行为时,我倾向于怀疑.NET GC或操作系统交换文件。

对于前者,您可以尝试使用.NET性能计数器来监视可疑活动。

如果设备有交换文件,您可以将其禁用并查看行为是否发生变化。

正如其他人所说的那样,一个分析器(或者是什么隔离什么条件导致延迟 - 甚至只是在发生时附加和破坏调试器)将是获取更多信息的好方法。

答案 1 :(得分:1)

您是否尝试在经过测试的系统上分析应用程序?使用内存和/或性能分析器?

你可以从这种类型的测试中获得一些好的信息:some .Net profilers 这是WPF的一个:WPF profiler from microsoft

答案 2 :(得分:1)

罪魁祸首是以下方法调用:

new HwndSource(new HwndSourceParameters());

这已添加到我的应用程序中,因为它修补了.NET 3.5中的内存泄漏问题。可以找到这种解决方法here。如果我删除此调用,渲染问题就会消失。

我取消了调用并以另一种方式修复了内存泄漏(删除了故事板动画并使用后面的代码)