【问题标题】:WPF Temporary Display FreezeWPF 临时显示冻结
【发布时间】:2011-08-07 11:25:03
【问题描述】:

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

当显示被冻结时,界面保持响应 (video)。

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

我在冻结期间运行了一个文件监视器,以查看是否有一些异常的文件访问或活动正在进行,但没有任何异常。

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

更新

我以为我已经通过删除一些动画代码解决了这个问题,但它不起作用。我仍然遇到这个问题,而且我已经走到了尽头。

以下是我尝试过的其他一些方法:

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

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

【问题讨论】:

标签: wpf rendering freeze


【解决方案1】:

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

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

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

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

【讨论】:

  • 我在表现出行为时运行了一些性能工具,但没有发现任何异常(ANTS Performance Profiler 和 Perforator)。我将检查交换文件的情况。我没有空间用于目标上的 Visual Studio,所以我必须进行远程调试。
  • 我忘记了目标 PC 正在使用紧凑型闪存。不推荐使用 flash 进行寻呼,所以我完全关闭了寻呼。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    new HwndSource(new HwndSourceParameters());
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-07
      • 1970-01-01
      • 2015-09-08
      • 2023-04-06
      • 1970-01-01
      • 2015-01-16
      • 2012-01-22
      • 1970-01-01
      相关资源
      最近更新 更多