【问题标题】:0x88980406 SyncFlush() ...Is there a workaround?0x88980406 SyncFlush() ...有解决方法吗?
【发布时间】:2013-03-06 23:29:11
【问题描述】:

我的应用程序中出现此异常。 我在网上找到了讨论它的链接,但没有说明如何追踪它和/或解决它。

请不要回复来自互联网的链接。 请回复追踪来源的策略。 如果您找到了解决方法,请回复。

Source: PresentationCore
Message: Exception from HRESULT: 0x88980406
Stack Trace:
   at System.Windows.Media.Composition.DUCE.Channel.SyncFlush()
   at System.Windows.Interop.HwndTarget.UpdateWindowSettings(Boolean enableRenderTarget, Nullable`1 channelSet)
   at System.Windows.Interop.HwndTarget.UpdateWindowPos(IntPtr lParam)
   at System.Windows.Interop.HwndTarget.HandleMessage(WindowMessage msg, IntPtr wparam, IntPtr lparam)
   at System.Windows.Interop.HwndSource.HwndTargetFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)

【问题讨论】:

标签: wpf crash wpf-4.0


【解决方案1】:

这是旧的,但无论如何我都会回答,因为我遇到了刚刚解决的同样问题。https://stackoverflow.com/a/18003004/1415307

基本上,我对这个错误的问题归结为一个过时的显卡驱动程序。更新到最新驱动后,问题已解决。

【讨论】:

    【解决方案2】:

    在我的情况下,事实证明有问题的应用程序已经在其指定硬件的内存限制上施压。每当我添加使用大量内存的代码时,都会出现这种情况。

    当我实现一个将处理图像缓冲区放在另一个线程上的功能时,我最终使用了MemoryFailPoint 机制。

    https://docs.microsoft.com/en-us/dotnet/api/system.runtime.memoryfailpoint

    第一次实现成功了,但经过多次尝试,QA 导致了 OOM 炸弹。 所以我用GC.Collect() 循环实现了MemoryFailPoint()(我知道这有点骇人听闻……但有时……完成任务)。

    我学到的主要内容是:

    1. 这是 WPF 中的一个非常糟糕的错误。
    2. 只有当您确实消耗了过多的内存时,您才需要担心它。

    【讨论】:

    • 我在一台用户计算机上看到同样的异常(只有 30 台中的一台!?)我既不了解问题的确切原因,也不了解解决方案。你能帮忙吗?您能否发送一些代码,您是如何使用 MemoryFailPoint 的,特别是您是如何强制 GarbageCollector 释放一些内存的?谢谢
    • 另外,我不明白为什么我的应用会占用太多内存。它通常在任务管理器中有大约 50MB 的 RAM,而那台计算机有 2GB。我唯一能想到的就是坏掉的垃圾收集器。我的用户整天都在工作,不断地打开和关闭表单。虽然大约有 20 个用户做得很好,但这个特定的用户正在获得 OutOfMemory 异常或原始主题中提到的这个特定异常。
    • 嗨@lot 抱歉,直到 StackExchange 给我发电子邮件,我才看到你的 cmets。您可以尝试分析您的代码中您可能持有对对象的引用的点,以便 GC 可以完成其工作。
    • 您可以调查是否可以迁移到不同版本的 .NET。在我的情况下(过去),不可能迁移到另一个版本的 .NET。我目前的职位一直在使用 4.5,完全没有遇到过这个问题(谢天谢地)。但这是一个错误。它要么与您按下 WPF 框架和 DirectX 本身的程度有关……要么与有问题的系统上的驱动程序有关。首先调查这些事情......祝你好运。
    【解决方案3】:

    在微软的大力帮助下,我们刚刚解决了困扰我们一年多的 SyncFlush 问题。事实证明,我们是在本机代码中创建多媒体计时器,但我们并不是每次都释放它们。更具体地说,我们调用了 timeBeginPeriod 和 timeEndPeriod,但是我们调用 begin 的次数多于 end,从而造成了资源泄漏。 WPF 渲染线程需要使用这些计时器,但我们用尽了它们的有限供应(可能是 65k)。结果是渲染线程停止渲染并挂起或导致崩溃。注意计时器!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-12
      • 2011-11-13
      相关资源
      最近更新 更多