我有一个C#/ WPF应用程序,旨在在具有512 MB内存的小型平板电脑上运行。如果让它继续运行,最终将抛出OutOfMemoryException。最多需要2天才能完成12个小时以上的工作。
使用ProcessExplorer和.NET Memory Profiler,我看不出有证据表明我的应用程序使用的内存随着时间的推移而增长。垃圾收集只是一个典型的小增长模式。
抛出异常后,我添加了代码以打印出所有正在运行的进程及其内存信息。我目前正在等待它再次发生。我应该提到PC基于闪存,并且禁用了分页。 512是硬限制。
它已在两台单独的PC上发生。在两种情况下,异常信息都相同:
Top Level Exception - System.OutOfMemoryException: Insufficient memory to continue the execution of the program.
at System.Windows.Media.Composition.DUCE+Channel.SendCommand(Byte* pCommandData, Int32 cSize)
at System.Windows.Media.MediaContext.EnterInterlockedPresentation()
at System.Windows.Media.MediaContext.ScheduleNextRenderOp(TimeSpan minimumDelay)
at System.Windows.Media.MediaContext.RenderMessageHandlerCore(Object resizedCompositionTarget)
at System.Windows.Media.MediaContext.AnimatedRenderMessageHandler(Object resizedCompositionTarget)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Boolean isSingleParameter)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
任何见识表示赞赏!
最佳答案
由于您是“小型平板电脑”,也许您正在调用一些非“ .Net”代码来控制某些硬件。是的,也许程序的那部分可能正在使用相当大的内存(但仍然不会泄漏任何内存)。要使垃圾收集器在这种情况下更努力工作,请考虑添加GC.AddMemoryPressure()调用。
关于c# - C#OutOfMemoryException-如何追查罪魁祸首,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5029885/