我有一个在.NET 3.5上运行的独立WPF应用程序。每隔一段时间,显示屏就会冻结几秒钟。这在经常更新某些内容的屏幕上最为明显。 Here is a video显示问题。
显示屏冻结时,界面仍然响应(video)。
我遇到过一些其他类似问题的帖子,这些帖子将其归因于SW / HW渲染问题。为了安全起见,我完全禁用了硬件渲染,但仍然存在问题。
我在冻结期间运行了一个文件监视器,看看是否有一些特殊的文件访问或活动,但没有什么是不寻常的。
最后说明:目标平台是一款小型触摸屏平板电脑,没有太多内存或马力(512 MB)。我只在目标上看到了这个问题,从来没有在我的开发PC上看到它,它在资源方面有更多。
更新
我以为我已经通过删除一些动画代码修复了这个问题,但它没有用。我仍然遇到问题而且我已经走到了尽头。
这是我尝试过的更多内容:
我真的很难过,并且增加了赏金。正如我所提到的,问题只发生在目标PC上(link)。
答案 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。如果我删除此调用,渲染问题就会消失。
我取消了调用并以另一种方式修复了内存泄漏(删除了故事板动画并使用后面的代码)