我一直在處理這個很長一段時間。有時它會拋出無效的操作異常,有時會導致內存不足。隨機用戶可以在一天內多次運行並崩潰。WPF應用程序與OOM異常隨機崩潰
我得到了一個用戶的調用堆棧,並且無法理解可能導致此問題的原因。這是一個帶有豐富UI的WPF應用程序。許多觀點,列表。使用PRISM和區域。
它還使用後臺線程來偵聽TCP,刷新數據並在UI線程上發送PRISM通知以進行更新。這個堆棧是否提供了我可能需要檢查的線索?這不是起源於我的代碼..
在 MS.Utility.ArrayItemList
1[[System.Windows.Freezable+FreezableContextPair, WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]..ctor(Int32) at MS.Utility.FrugalObjectList
1 [System.Windows.Freezable + FreezableContextPair, WindowsBase,版本= 4.0.0.0,文化=中立, 公鑰= 31bf3856ad364e35 (Int32)at MS.Utility.FrugalObjectList` [[System.Windows.Freezable + FreezableContextPair, WindowsBase,Version = 4.0.0.0,Culture = neutral, PublicKeyToken = 31bf3856ad364e35]]。Insert(Int32, FreezableContextPair) at System.Windows.Freezable.AddContextToList(System.Windows.DependencyObject, System.Windows.De pendencyProperty)在 System.Windows.Freezable.AddContextInformation(System.Windows.DependencyObject, System.Windows.DependencyProperty)處 System.Windows.Freezable.AddInheritanceContext(System.Windows.DependencyObject, System.Windows.DependencyProperty) System.Windows.DependencyObject.ProvideSelfAsInheritanceContext(System.Windows.DependencyObject, System.Windows.DependencyProperty)在 System.Windows.Freezable.OnFreezablePropertyChanged(System.Windows.DependencyObject, System.Windows.DependencyObject,System.Windows.DependencyProperty)
at System.Windows.Media.RenderData.PropagateChangedHandler(System.EventHandler, 布爾型)在 System.Windows.UIElement.RenderClose(System.Windows.Media.IDrawingContent) 在 System.Windows.Media.VisualDrawingContext.CloseCore(System.Windows.Media.RenderData) 在System.Windows.Media。 RenderDataDrawingContext.DisposeCore() System.Windows.Media.DrawingContext.System.IDisposable.Dispose()at System.Windows.Media.RenderDataDrawingContext.Close()at System.Windows.UIElement.Arrange(System.Windows.Rect )在 System.Windows.Controls.DataGridCellsPanel.ArrangeChild(System.Windows.UIElement, 的Int32,ArrangeState)在 System.Windows.Controls.DataGridCellsPanel.ArrangeOverride(System.Windows.Size) 在System.Windows.FrameworkElemen t.ArrangeCore(System.Windows.Rect)
at System.Windows.UIElement.Arrange(System.Windows.Rect)at MS.Internal.Helper.ArrangeElementWithSingleChild(System.Windows.UIElement, System.Windows.Size)在 System.Windows.Controls.ItemsPresenter.ArrangeOverride(System.Windows.Size) 在System.Windows.FrameworkElement.ArrangeCore(System.Windows.Rect)
在System.Windows.UIElement.Arrange(System.Windows.Rect )在 System.Windows.Controls.Control.ArrangeOverride(System.Windows.Size)
在 System.Windows.Controls.Primitives.DataGridCellsPresenter.ArrangeOverride(System.Windows.Size) 在System.Windows.FrameworkE lement.ArrangeCore(System.Windows。矩形)
在System.Windows.UIElement.Arrange(System.Windows.Rect)在 System.Windows.Controls.Grid.ArrangeOverride(System.Windows.Size)
在System.Windows.FrameworkElement.ArrangeCore(系統。 Windows.Rect)
在System.Windows.UIElement.Arrange(System.Windows.Rect)在 System.Windows.Controls.Border.ArrangeOverride(System.Windows.Size)
在System.Windows.FrameworkElement.ArrangeCore( System.Windows.Rect)
at System.Windows.UIElement.Arrange(System.Windows.Rect)at System.Windows.Controls.Control.ArrangeOverride(System.Windows.Size)
at System.Windows.Controls.DataGridRow.ArrangeOverride(System.Windows.Size) at System.Windows.FrameworkElement.ArrangeCore(System.Windows.Rect)
at System.Windows.UIElement.Arrange(System.Windows.Rect)在 System.Windows.Controls.VirtualizingStackPanel.ArrangeOtherItemsInExtendedViewport(布爾, System.Windows.UIElement,System.Windows.Size,雙,的Int32, System.Windows.Rect的ByRef,System.Windows.Size的ByRef, System.Windows .Point ByRef,Int32 ByRef)at System.Windows.Controls.VirtualizingStackPanel.ArrangeOverride(System.Windows.Size) at System.Windows.FrameworkElement.ArrangeCore(System.Windows.Rect)
at System.Windows.UIElement .Arrange(System.Windows.Rect)在 System.Windows.ContextLayoutManager.UpdateLayout()在 System.Windows.ContextLayoutManager.UpdateLayoutCallback(System.Object的) 在System.Windows.Media.MediaContext + InvokeOnRenderCallback.DoWork()
處 System.Windows.Media.MediaContext.RenderMessageHandler(System.Object的)System.Windows.Media.MediaContext.FireInvokeOnRenderCallbacks()
在 System.Windows.Media.MediaContext.RenderMessageHandlerCore(System.Object的) 在 MS.Intern。System.InWindows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object,Int32)at al.Threading.ExceptionFilterHelper.TryCatchWhen(System.Object的, System.Delegate,System.Object的,的Int32,System.Delegate)在 System.Windows.Threading.DispatcherOperation.InvokeImpl()在 System.Windows.Threading.DispatcherOperation。 InvokeInSecurityContext(System.Object的) 處 System.Threading.ExecutionContext.Run(的System.Threading System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback,System.Object的,布爾值)。 ExecutionContext, System.Threading.ContextCallback,System.Object,Boolean) System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback,System.Object)at System.Windows.Threading.DispatcherOperation.Invoke()在 System.Windows.Threading.Dispatcher.ProcessQueue()在 System.Windows.Threading.Dispatcher.WndProcHook(IntPtr的,的Int32,IntPtr的, IntPtr的,布爾的ByRef)在MS.Win32.HwndWrapper.WndProc(IntPtr, Int32,IntPtr,IntPtr,Boolean ByRef)at MS.Win32.HwndSubclass.DispatcherCallbackOperation(System.Object)at System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object的,Int32)將在在 System.Windows.Threading.Dispatcher.LegacyInvokeImpl MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(System.Object的, System.Delegate,System.Object的,的Int32,System.Delegate)( System.Windows。Threading.DispatcherPriority, System.TimeSpan,System.Delegate,System.Object的,Int32)將在 MS.Win32.HwndSubclass.SubclassWndProc(IntPtr的,的Int32,IntPtr的,IntPtr的)
在 MS.Win32.UnsafeNativeMethods.DispatchMessage(系統.Windows.Interop.MSG 的ByRef)在 System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame) 在 System.Windows.Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame) at System.Windows.Threading.Dispatcher.Run()at System.Windows.Application.RunDispatcher(System.Object)at System.Windows.Application.RunInternal(System.Windows.Window)at System.Windows.Application.Run(System.Windows.Window)在 ArturExpress.Main.App.Main()
我建議使用一些分析器來查看實際發生的事情。從描述中很難猜出... – walther 2014-08-27 14:34:04
堆棧跟蹤的實際異常是什麼?是OutOfMemoryException還是別的?另外,有沒有內部的例外? – user469104 2014-08-27 14:35:09
不幸的是我無法追查它。這是不可複製的,隨機發生在用戶機器上(可以好幾天)。該堆棧跟蹤來自事件日誌。這是OutOfMemoryException。 – katit 2014-08-27 14:41:37