WPF临时显示冻结

8
我有一个独立的WPF应用程序运行在.NET 3.5上。时不时地,显示器会冻结几秒钟。这在频繁更新内容的屏幕上最为明显。这是问题的视频

当显示器被冻结时,界面仍然保持响应 (视频)。

我找到了一些其他帖子,他们也遇到了类似的问题,认为这是软件/硬件渲染问题。为了安全起见,我完全禁用了硬件加速,但问题仍然存在。

在冻结期间,我运行了文件监视器,以查看是否有异常的文件访问或活动,但没有发现任何异常情况。

最后注意:目标平台是一台内存和处理能力都不太强的小型触摸屏面板电脑(512 MB)。我只在目标设备上看到这个问题,而在我的开发PC上从未出现过,因为我的开发PC资源更加充足。

更新

我以为通过删除一些动画代码来解决问题,但它没有起作用。我仍然遇到问题,现在已经束手无策了。

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

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

我真的很困惑,在这里添加了一个赏金。正如我所提到的,这个问题只发生在目标PC上(链接)。


你的操作系统和显卡是什么? - Vladislav Rastrusny
@FractalizeR - 这是一台个人电脑,但我正在使用自定义的Windows嵌入式标准映像。http://www.icpamerica.com/products/LCD_products/embedded_panel_PC/afl_057a_lx.html - BabaBooey
3个回答

2
我倾向于怀疑.NET GC或操作系统交换文件在出现这种行为时的原因。
对于前者,您可以尝试使用.NET性能计数器来监视可疑活动。
如果设备有交换文件,您可以禁用它并查看行为是否会改变。
正如其他人所说,使用分析器(或隔离导致延迟的条件的某些方法 - 即使只是在发生时附加和中断调试器)是获取更多信息的好方法。

我已经运行了一些性能工具,当程序出现问题时并没有发现异常(ANTS Performance Profiler和Perforator)。我将检查交换文件的情况。由于目标设备上没有足够的空间安装Visual Studio,所以我需要进行远程调试。 - BabaBooey
我忘记目标PC使用紧凑型闪存。不建议使用闪存进行分页,因此我已经完全关闭了分页。 - BabaBooey

1

你有尝试在被测试的系统上对应用程序进行分析吗?使用内存和/或性能分析器?

通过这种类型的测试,你可以获得一些很好的信息:一些 .Net 分析器 这里还有一个针对 WPF 的:微软的 WPF 分析器


1
罪魁祸首是以下方法调用:
new HwndSource(new HwndSourceParameters());

这段代码被添加到我的应用程序中,因为它修复了.NET 3.5中的内存泄漏问题。可以在这里找到此解决方法。如果我删除此调用,则渲染问题将消失。
我删除了此调用,并以另一种方式修复了内存泄漏问题(删除故事板动画并改用代码后台)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接