У меня проблема с outofmemoryexception, с сообщением об ошибке, пойманным App_DispatcherUnhandledException (1 из некоторых сообщений об ошибках):
Message: Zgłoszono wyjątek typu 'System.OutOfMemoryException'. Source: PresentationFramework
StackTrace:
w System.Windows.TreeChangeInfo.CreateParentInheritableProperties(DependencyObject d, DependencyObject parent, Boolean isAddOperation)
w System.Windows.TreeWalkHelper.InvalidateOnTreeChange(FrameworkElement fe, FrameworkContentElement fce, DependencyObject parent, Boolean isAddOperation)
w System.Windows.FrameworkElement.OnVisualParentChanged(DependencyObject oldParent)
w System.Windows.Media.Visual.FireOnVisualParentChanged(DependencyObject oldParent)
w System.Windows.Media.Visual.AddVisualChild(Visual child)
w System.Windows.FrameworkElement.set_TemplateChild(UIElement value)
w System.Windows.FrameworkTemplate.WireRootObjectToParent(Object createdObject, DependencyObject rootObject, DependencyObject container, FrameworkElement feContainer, INameScope nameScope)
w System.Windows.FrameworkTemplate.HandleBeforeProperties(Object createdObject, DependencyObject& rootObject, DependencyObject container, FrameworkElement feContainer, INameScope nameScope)
w System.Windows.FrameworkTemplate.<>c__DisplayClass45_0.<LoadOptimizedTemplateContent>b__2(Object sender, XamlObjectEventArgs args)
w System.Xaml.XamlObjectWriter.OnBeforeProperties(Object value)
w System.Xaml.XamlObjectWriter.Logic_CreateAndAssignToParentStart(ObjectWriterContext ctx)
w System.Xaml.XamlObjectWriter.WriteEndObject()
w System.Xaml.XamlWriter.WriteNode(XamlReader reader)
w System.Windows.FrameworkTemplate.LoadTemplateXaml(XamlReader templateReader, XamlObjectWriter currentWriter)
w System.Windows.FrameworkTemplate.LoadTemplateXaml(XamlObjectWriter objectWriter)
w System.Windows.FrameworkTemplate.LoadOptimizedTemplateContent(DependencyObject container, IComponentConnector componentConnector, IStyleConnector styleConnector, List`1 affectedChildren, UncommonField`1 templatedNonFeChildrenField)
w System.Windows.FrameworkTemplate.LoadContent(DependencyObject container, List`1 affectedChildren)
w System.Windows.StyleHelper.ApplyTemplateContent(UncommonField`1 dataField, DependencyObject container, FrameworkElementFactory templateRoot, Int32 lastChildIndex, HybridDictionary childIndexFromChildID, FrameworkTemplate frameworkTemplate)
w System.Windows.FrameworkTemplate.ApplyTemplateContent(UncommonField`1 templateDataField, FrameworkElement container)
w System.Windows.FrameworkElement.ApplyTemplate()
w System.Windows.FrameworkElement.MeasureCore(Size availableSize)
w System.Windows.UIElement.Measure(Size availableSize)
w System.Windows.Controls.Grid.MeasureOverride(Size constraint)
w System.Windows.FrameworkElement.MeasureCore(Size availableSize)
w System.Windows.UIElement.Measure(Size availableSize)
w System.Windows.Controls.Control.MeasureOverride(Size constraint)
w System.Windows.FrameworkElement.MeasureCore(Size availableSize)
w System.Windows.UIElement.Measure(Size availableSize)
w Telerik.Windows.Controls.GridView.GridViewCellsPanel.MeasureCell(IColumnElement column, GridViewCellBase cell, Size size)
w Telerik.Windows.Controls.GridView.GridViewCellsPanel.RealizeAndMeasureCells(Int32 startIndex, Int32 predictedLastIndex, Func`2 calculateLastIndex)
w Telerik.Windows.Controls.GridView.GridViewCellsPanel.UpdateVirtualizedCells()
w Telerik.Windows.Controls.GridView.GridViewCellsPanel.MeasureOverride(Size availableSize)
w System.Windows.FrameworkElement.MeasureCore(Size availableSize)
w System.Windows.UIElement.Measure(Size availableSize)
w MS.Internal.Helper.MeasureElementWithSingleChild(UIElement element, Size constraint)
w System.Windows.Controls.ItemsPresenter.MeasureOverride(Size constraint)
w System.Windows.FrameworkElement.MeasureCore(Size availableSize)
w System.Windows.UIElement.Measure(Size availableSize)
w System.Windows.Controls.Grid.MeasureOverride(Size constraint)
w System.Windows.FrameworkElement.MeasureCore(Size availableSize)
w System.Windows.UIElement.Measure(Size availableSize)
w System.Windows.Controls.Control.MeasureOverride(Size constraint)
w System.Windows.FrameworkElement.MeasureCore(Size availableSize)
w System.Windows.UIElement.Measure(Size availableSize)
w System.Windows.Controls.Grid.MeasureCell(Int32 cell, Boolean forceInfinityV)
w System.Windows.Controls.Grid.MeasureCellsGroup(Int32 cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean forceInfinityV, Boolean& hasDesiredSizeUChanged)
w System.Windows.Controls.Grid.MeasureOverride(Size constraint)
w System.Windows.FrameworkElement.MeasureCore(Size availableSize)
w System.Windows.UIElement.Measure(Size availableSize)
w System.Windows.Controls.Border.MeasureOverride(Size constraint)
w System.Windows.FrameworkElement.MeasureCore(Size availableSize)
w System.Windows.UIElement.Measure(Size availableSize)
w System.Windows.Controls.Control.MeasureOverride(Size constraint)
w Telerik.Windows.Controls.GridView.GridViewRowItem.MeasureOverride(Size availableSize)
w System.Windows.FrameworkElement.MeasureCore(Size availableSize)
w System.Windows.UIElement.Measure(Size availableSize)
w Telerik.Windows.Controls.GridView.GridViewVirtualizingPanel.FlatLayoutStrategy.RealizeRows(Int32 startIndex, Int32 endIndex, Double& verticalOffset, HashSet`1& realizedRows)
w Telerik.Windows.Controls.GridView.GridViewVirtualizingPanel.FlatLayoutStrategy.MeasureOverride(Size availableSize)
w Telerik.Windows.Controls.GridView.GridViewVirtualizingPanel.MeasureOverride(Size availableSize)
w System.Windows.FrameworkElement.MeasureCore(Size availableSize)
w System.Windows.UIElement.Measure(Size availableSize)
w MS.Internal.Helper.MeasureElementWithSingleChild(UIElement element, Size constraint)
w System.Windows.Controls.ScrollContentPresenter.MeasureOverride(Size constraint)
w System.Windows.FrameworkElement.MeasureCore(Size availableSize)
w System.Windows.UIElement.Measure(Size availableSize)
w System.Windows.Controls.Grid.MeasureCell(Int32 cell, Boolean forceInfinityV)
w System.Windows.Controls.Grid.MeasureCellsGroup(Int32 cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean forceInfinityV, Boolean& hasDesiredSizeUChanged)
w System.Windows.Controls.Grid.MeasureCellsGroup(Int32 cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean forceInfinityV)
w System.Windows.Controls.Grid.MeasureOverride(Size constraint)
w System.Windows.FrameworkElement.MeasureCore(Size availableSize)
w System.Windows.UIElement.Measure(Size availableSize)
w System.Windows.Controls.ScrollViewer.MeasureOverride(Size constraint)
w Telerik.Windows.Controls.GridView.GridViewScrollViewer.MeasureOverride(Size availableSize)
w System.Windows.FrameworkElement.MeasureCore(Size availableSize)
w System.Windows.UIElement.Measure(Size availableSize)
w System.Windows.Controls.Grid.MeasureCell(Int32 cell, Boolean forceInfinityV)
w System.Windows.Controls.Grid.MeasureCellsGroup(Int32 cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean forceInfinityV, Boolean& hasDesiredSizeUChanged)
w System.Windows.Controls.Grid.MeasureCellsGroup(Int32 cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean forceInfinityV)
w System.Windows.Controls.Grid.MeasureOverride(Size constraint)
w System.Windows.FrameworkElement.MeasureCore(Size availableSize)
w System.Windows.UIElement.Measure(Size availableSize)
w System.Windows.Controls.Grid.MeasureOverride(Size constraint)
w System.Windows.FrameworkElement.MeasureCore(Size availableSize)
w System.Windows.UIElement.Measure(Size availableSize)
w System.Windows.Controls.Control.MeasureOverride(Size constraint)
w Telerik.Windows.Controls.GridView.GridViewDataControl.MeasureOverride(Size availableSize)
w System.Windows.FrameworkElement.MeasureCore(Size availableSize)
w System.Windows.UIElement.Measure(Size availableSize)
w System.Windows.Controls.Grid.MeasureOverride(Size constraint)
w System.Windows.FrameworkElement.MeasureCore(Size availableSize)
w System.Windows.UIElement.Measure(Size availableSize)
w System.Windows.Controls.Grid.MeasureCell(Int32 cell, Boolean forceInfinityV)
w System.Windows.Controls.Grid.MeasureCellsGroup(Int32 cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean forceInfinityV, Boolean& hasDesiredSizeUChanged)
w System.Windows.Controls.Grid.MeasureCellsGroup(Int32 cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean forceInfinityV)
w System.Windows.Controls.Grid.MeasureOverride(Size constraint)
w System.Windows.FrameworkElement.MeasureCore(Size availableSize)
w System.Windows.UIElement.Measure(Size availableSize)
w System.Windows.Controls.Grid.MeasureCell(Int32 cell, Boolean forceInfinityV)
w System.Windows.Controls.Grid.MeasureCellsGroup(Int32 cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean forceInfinityV, Boolean& hasDesiredSizeUChanged)
w System.Windows.Controls.Grid.MeasureCellsGroup(Int32 cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean forceInfinityV)
w System.Windows.Controls.Grid.MeasureOverride(Size constraint)
w System.Windows.FrameworkElement.MeasureCore(Size availableSize)
w System.Windows.UIElement.Measure(Size availableSize)
w MS.Internal.Helper.MeasureElementWithSingleChild(UIElement element, Size constraint)
w System.Windows.Controls.ContentPresenter.MeasureOverride(Size constraint)
w System.Windows.FrameworkElement.MeasureCore(Size availableSize)
w System.Windows.UIElement.Measure(Size availableSize)
w System.Windows.ContextLayoutManager.UpdateLayout()
w System.Windows.ContextLayoutManager.UpdateLayoutCallback(Object arg)
w System.Windows.Media.MediaContext.InvokeOnRenderCallback.DoWork()
w System.Windows.Media.MediaContext.FireInvokeOnRenderCallbacks()
w System.Windows.Media.MediaContext.RenderMessageHandlerCore(Object resizedCompositionTarget)
w System.Windows.Media.MediaContext.RenderMessageHandler(Object resizedCompositionTarget)
w System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
w System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
HResult: -2147024882
Вот некоторые сведения:
Приложение работает на RDS, с 15-25 пользователями, использующими приложение
Доступная память: 32 ГБ
Средняя используемая память: 17 ГБ
Не бывает ситуации, когда используемая память достигает 30 ГБ (максимальный пик был около 23 ГБ)
Процессор в порядке, в среднем 40%,достигает пиковых значений до 60%
Использование ОЗУ для экземпляра приложения увеличивается с использованием примерно до 1,5 ГБ на экземпляр.
Приложение было профилировано несколько раз, в соответствии с VS Profiler и другими профилировщиками (включая JetBrains one) было 0 утечек памяти
Приложениеиспользует библиотеки Telerik
Приложение использует Entity Framework
Я немного застрял и не знаю, где искать возможные проблемы.Оптимизация заняла у меня несколько недель, и все прошло довольно хорошо - мне удалось исправить типичные утечки памяти и проблемы с распределением памяти, иногда приложению нужно вручную запускать GC.Collect (), но это происходит довольно редко.Также нет шаблона, когда возникает OutOfMemoryException, и я не знаю, где искать проблему.Поэтому я ищу опытного разработчика WPF, чтобы, может быть, поделиться со мной своими экспериментами по таким вопросам.
Последняя вещь:
На мой взгляд, приложение слишком велико для WPF из-заклассический рост памяти WPF (приложение идет от 60 КБ до 1,5 КБ оперативной памяти в течение пары часов), но у меня нет другого выбора, кроме как решить эту проблему.
Есть идеи?
РЕДАКТИРОВАТЬ: я не администратор в среде RDS, есть другой парень, занимающийся развертыванием и администрированием, возможно, есть какие-то изменения, которые он, возможно, сделал, которые началивызвать эту проблему?