2013-03-18 169 views
15

我在我的应用程序中遇到了这个异常。 我发现在网络上讨论它的链接,但没有说明如何跟踪它和/或解决它。0x88980406 SyncFlush()...是否有解决方法?

请不要回复来自互联网的链接。 请回复跟踪来源的策略。 如果您发现它们,请使用解决方法回复。

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) 
+2

我认为这篇文章可以帮助,接受的答案包含调试此问题的策略列表。 http://stackoverflow.com/questions/1944577/win32-window-in-wpf – invalidusername 2013-03-18 15:39:16

+2

有一个很好的MSDN博客深入描述这个问题。简单的答案是没有单一原因:https://blogs.msdn.microsoft.com/dsui_team/2013/11/18/wpf-render-thread-failures/。 – 2016-05-18 08:48:52

回答

6

就我而言,事实证明有问题的应用程序已经在对其特定硬件的内存限制进行调整。任何时候我添加使用了相当数量的内存的代码,就会出现这种情况。

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

http://msdn.microsoft.com/en-us/library/system.runtime.memoryfailpoint.aspx

首先实施并获得成功,但多次尝试后QA造成OOM炸弹。 所以我实现了一个MemoryFailPoint()与GC.Collect()循环(hackish我知道...但有时...得到呃完成)。

我学到的主要内容是... a)这是一个非常糟糕的WPF错误。 b)如果你真的消耗了过多的内存,你只需要担心它。

+0

我在一台用户计算机上看到了同样的例外情况(只有30%!)我不明白问题的确切原因,也不了解解决方案。你能帮忙吗?您能否请您发送一些代码您是如何使用MemoryFailPoint的,特别是您是如何强制GarbageCollector释放一些内存的?谢谢 – lot 2014-03-21 15:59:16

+0

而且,我不明白为什么我的应用会占用太多内存。它通常在任务管理器中有大约50MB的RAM,并且该计算机有2GB。我唯一能想到的就是破垃圾收集器。我的用户正在全天工作,不断打开和关闭窗体。虽然大约有两十个用户正在做的很好,但这个特定的用户正在获取OutOfMemory异常或原始主题中提到的特定异常。 – lot 2014-03-21 16:03:06

+0

您好@lot抱歉,我没有看到您的意见,直到StackExchange通过电子邮件发送给我。您可以尝试分析您的代码以获取可能持有对象引用的点,以便GC可以完成其工作。 – cbuteau 2014-03-23 00:20:53

1

随着微软的出色帮助,我们刚刚解决了困扰我们一年多的SyncFlush问题。事实证明,我们正在用本地代码创建多媒体计时器,但我们并没有每次都释放它们。更具体地说,我们调用了timeBeginPeriod和timeEndPeriod,但我们调用的开始次数多于结束次数,因此造成了资源泄漏。 WPF渲染线程需要使用这些定时器,但我们耗尽了它们的有限供应量(可能为65k)。结果是渲染线程停止渲染并挂起或导致崩溃。注意定时器!

相关问题