2013-03-18 145 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)。結果是渲染線程停止渲染並掛起或導致崩潰。注意定時器!

相關問題