OutOfMemoryException, я подозреваю, что причиной является DbContext, но я не уверен? - PullRequest
0 голосов
/ 24 сентября 2018

У нас возникла проблема, в какой-то случайный момент времени приложение просто выбросило бы исключение outOfMemoryException, которое я не смог бы последовательно воспроизвести на своем локальном компьютере.Я использовал средства диагностики в Visual Studio, ANTS Memory Profiler, также создал файл DUMP и проанализировал его, и все, похоже, указывает на список строк, созданных где-то и не очищенных ГХ.

Когда я смотрю на экземпляры строк в инструментах диагностики в Visual Studio, кажется, что контекст создает больше строк, и каким-то образом это связано с DbContext, я еще не уверен на 100%, почему.Также, когда я проверял экземпляры с помощью профилировщиков памяти ANTS, все строки выглядели как имена столбцов db, Db MetaData..etc.

enter image description here

Любые комментарии / помощь / рекомендации будут оценены.

Исключение (РЕДАКТИРОВАТЬ):

                    Exception type: OutOfMemoryException 
                Exception message: Exception of type 'System.OutOfMemoryException' was thrown.
            at System.Data.SqlClient.TdsParser.TryReadPlpUnicodeChars(Char[]& buff, Int32 offst, Int32 len, TdsParserStateObject stateObj, Int32& totalCharsRead)
            at System.Data.SqlClient.TdsParser.TryReadSqlStringValue(SqlBuffer value, Byte type, Int32 length, Encoding encoding, Boolean isPlp, TdsParserStateObject stateObj)
            at System.Data.SqlClient.TdsParser.TryReadSqlValue(SqlBuffer value, SqlMetaDataPriv md, Int32 length, TdsParserStateObject stateObj, SqlCommandColumnEncryptionSetting columnEncryptionOverride, String columnName)
            at System.Data.SqlClient.SqlDataReader.TryReadColumnData()
            at System.Data.SqlClient.SqlDataReader.TryReadColumnInternal(Int32 i, Boolean readHeaderOnly)
            at System.Data.SqlClient.SqlDataReader.TryReadColumn(Int32 i, Boolean setTimeout, Boolean allowPartiallyReadColumn)
            at System.Data.SqlClient.SqlDataReader.GetString(Int32 i)
            at lambda_method(Closure , Shaper )
            at System.Data.Entity.Core.Common.Internal.Materialization.Coordinator`1.ReadNextElement(Shaper shaper)
            at System.Data.Entity.Core.Common.Internal.Materialization.Shaper`1.SimpleEnumerator.MoveNext()
            at System.Data.Entity.Internal.LazyEnumerator`1.MoveNext()
            at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
            at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
            at Repositories.AttributeAreaRepository.ActiveAttributesStringForOptions(Int32 builderId, Int32 divisionId, Nullable`1 phasePlanId) in D:\SSSource\Projects\Repositories\AttributeAreaRepository.cs:line 176
            at Web.Areas.Customer.Models.CustomerController.Options(Nullable`1 isSpectOptionTab) in D:\SSSource\Websites\Web\Areas\Customer\Controllers\CustomerController.cs:line 4311
            at Web.Areas.Spec.Controllers.SpecOptionController.Index() in D:\SSSource\Websites\Web\Areas\Spec\Controllers\SpecOptionController.cs:line 35
            at lambda_method(Closure , ControllerBase , Object[] )
            at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
            at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
            at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
            at System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState)
            at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult)
            at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
            at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
            at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d()
            at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f()
            at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f()
            at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f()
            at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass33.<BeginInvokeActionMethodWithFilters>b__32(IAsyncResult asyncResult)
            at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult)
            at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
            at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult)
            at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.<>c__DisplayClass2b.<BeginInvokeAction>b__1c()
            at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult)
            at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult)
            at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
            at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult)
            at System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState)
            at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult)
            at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
            at System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult)
            at System.Web.Mvc.Controller.<BeginExecute>b__15(IAsyncResult asyncResult, Controller controller)
            at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult)
            at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
            at System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult)
            at System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult)
            at System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState)
            at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult)
            at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
            at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)
            at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)
            at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
            at System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step)
            at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

Цитата

...