OutOfMemoryException в Sharp Develop 4.2

У меня есть запрограммированное на C# приложение, и примерно через 13 дней работы с отладчиком Sharp Development 4.2.1 приложение выдает исключение OutOfMemoryException.

Я сбит с толку из-за того, что трассировка стека исключений исходит от резкой разработки. Это проблема или просто заблуждение?

В прошлом у меня также были исключения из памяти, но каждый раз, когда трассировка стека показывала какой-то код моего проекта, а не из резкой разработки. Я исправил эти проблемы с помощью профилировщика памяти ANTS.

Есть предложения ? Является ли сборка «выпуска» без отладчика более стабильной для более длительного времени работы приложения?

Спасибо заранее.

-------------------------------------------------------------
Complete Stacktrace:

SharpDevelop Version : 4.2.1.8805-9345aa7c

.NET Version         : 4.0.30319.1

OS Version           : Microsoft Windows NT 6.1.7601 Service Pack 1

Current culture      : Japanese (Japan) (ja-JP)

Current UI language  : en

Working Set Memory   : 1017236kb

GC Heap Memory       : 713962kb


Exception thrown:

System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.

   at System.Collections.Generic.List`1.set_Capacity(Int32 value)

   at System.Collections.Generic.List`1.EnsureCapacity(Int32 min)

   at System.Collections.Generic.List`1.Add(T item)

   at Debugger.Interop.TrackedComObjects.Track(Object obj)

   at Debugger.Interop.TrackedComObjects.ProcessOutParameter(Object parameter)

   at Debugger.ManagedCallbackSwitch.GetProcessCallbackInterface(String name, ICorDebugAppDomain pAppDomain)

   at Debugger.ManagedCallbackProxy.<>c__DisplayClass58.<Exception>b__57()

   at Debugger.MTA2STA.<>c__DisplayClass4.<EnqueueCall>b__1()

   at Debugger.MTA2STA.PerformCall()

   at Debugger.MTA2STA.PerformAllCalls()

   at System.Windows.Forms.Control.InvokeMarshaledCallbackDo(ThreadMethodEntry tme)

   at System.Windows.Forms.Control.InvokeMarshaledCallbackHelper(Object obj)

   at System.Threading.ExecutionContext.runTryCode(Object userData)

   at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)

   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)

   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)

   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)

   at System.Windows.Forms.Control.InvokeMarshaledCallback(ThreadMethodEntry tme)

   at System.Windows.Forms.Control.InvokeMarshaledCallbacks()


---- Recent log messages:

09:37:15.383 [1] DEBUG - Debugger: Callback: Exception

09:37:15.383 [1] DEBUG - Debugger: Process has queued callbacks

09:37:15.384 [1] DEBUG - Debugger: Callback: Exception2 (type=DEBUG_EXCEPTION_FIRST_CHANCE)

09:37:15.391 [1] DEBUG - Debugger: Callback: Exception2 (type=DEBUG_EXCEPTION_USER_FIRST_CHANCE)

09:37:15.391 [1] DEBUG - Debugger: Process has queued callbacks

09:37:15.391 [1] DEBUG - Debugger: Callback: Exception2 (type=DEBUG_EXCEPTION_USER_FIRST_CHANCE)

09:37:15.392 [1] DEBUG - Debugger: Process has queued callbacks

09:37:15.392 [1] DEBUG - Debugger: Callback: Exception2 (type=DEBUG_EXCEPTION_USER_FIRST_CHANCE)

09:37:15.396 [1] DEBUG - Debugger: Callback: Exception2 (type=DEBUG_EXCEPTION_USER_FIRST_CHANCE)

09:37:15.397 [1] DEBUG - Debugger: Callback: Exception2 (type=DEBUG_EXCEPTION_CATCH_HANDLER_FOUND)

09:37:15.397 [1] DEBUG - Debugger: Process has queued callbacks

09:37:15.398 [1] DEBUG - Debugger: Callback: Exception2 (type=DEBUG_EXCEPTION_CATCH_HANDLER_FOUND)

09:37:15.398 [1] DEBUG - Debugger: Process has queued callbacks

09:37:15.399 [1] DEBUG - Debugger: Callback: Exception2 (type=DEBUG_EXCEPTION_CATCH_HANDLER_FOUND)

09:37:15.403 [1] DEBUG - Debugger: Callback: Exception2 (type=DEBUG_EXCEPTION_CATCH_HANDLER_FOUND)

09:37:15.405 [1] DEBUG - Debugger: Callback: Exception

09:37:15.405 [1] DEBUG - Debugger: Process has queued callbacks

09:37:15.407 [1] DEBUG - Debugger: Callback: Exception2 (type=DEBUG_EXCEPTION_FIRST_CHANCE)

09:37:15.410 [1] DEBUG - Debugger: Callback: Exception

09:37:15.410 [1] DEBUG - Debugger: Process has queued callbacks

09:37:15.411 [1] DEBUG - Debugger: Callback: Exception2 (type=DEBUG_EXCEPTION_FIRST_CHANCE)

09:37:15.411 [1] DEBUG - Debugger: Process has queued callbacks

09:37:15.411 [1] DEBUG - Debugger: Callback: Exception

09:37:15.411 [1] DEBUG - Debugger: Process has queued callbacks

09:38:13.301 [1] ERROR - ThreadException caught

--> Exception:

System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.

   at System.Collections.Generic.List`1.set_Capacity(Int32 value)

   at System.Collections.Generic.List`1.EnsureCapacity(Int32 min)

   at System.Collections.Generic.List`1.Add(T item)

   at Debugger.Interop.TrackedComObjects.Track(Object obj)

   at Debugger.Interop.TrackedComObjects.ProcessOutParameter(Object parameter)

   at Debugger.ManagedCallbackSwitch.GetProcessCallbackInterface(String name, ICorDebugAppDomain 
pAppDomain)

   at Debugger.ManagedCallbackProxy.<>c__DisplayClass58.<Exception>b__57()

   at Debugger.MTA2STA.<>c__DisplayClass4.<EnqueueCall>b__1()

   at Debugger.MTA2STA.PerformCall()

   at Debugger.MTA2STA.PerformAllCalls()

   at System.Windows.Forms.Control.InvokeMarshaledCallbackDo(ThreadMethodEntry tme)

   at System.Windows.Forms.Control.InvokeMarshaledCallbackHelper(Object obj)

   at System.Threading.ExecutionContext.runTryCode(Object userData)

   at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, 
CleanupCode backoutCode, Object userData)

   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, 
ContextCallback callback, Object state)

   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback 
callback, Object state, Boolean ignoreSyncCtx)

   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback 
callback, Object state)

   at System.Windows.Forms.Control.InvokeMarshaledCallback(ThreadMethodEntry tme)

   at System.Windows.Forms.Control.InvokeMarshaledCallbacks()



---- Post-error application state information:

Installed 3rd party AddIns: 

Workbench.ActiveContent: <null>

person Tintenfiisch    schedule 10.01.2014    source источник
comment
Ну, тот факт, что он падает в библиотечном коде, не означает, что это не ваш код использует слишком много памяти. Если вы использовали MemoryProfiler, вы сможете увидеть, какие объекты используют память, когда происходит сбой.   -  person PMF    schedule 10.01.2014
comment
Постарайтесь убедиться, что вы вызываете метод Dispose каждого объекта IDisposable.   -  person dburner    schedule 10.01.2014
comment
Почему ваша программа работает 13 дней с IDE? Это Тест? Сделайте Release-Build и позвольте этой сборке работать 13 дней. А что ваша программа делает 13 дней?   -  person user743414    schedule 10.01.2014


Ответы (1)


Это утечка памяти в отладчике SharpDevelop. Он поддерживает список любых COM-объектов, которые он использует, и не освобождает их до конца сеанса отладки.

Если вам нужно запускать программу в течение длительного периода времени, вы должны запускать ее без отладчика. При необходимости можно позже еще прикрепить отладчик к процессу.

person Daniel    schedule 10.01.2014
comment
Спасибо за ответы. Я попробую еще раз без отладчика и приму это как ответ, если это было основной причиной. - person Tintenfiisch; 13.01.2014