首页 > 解决方案 > 如何检测 C# 应用程序中的内存泄漏?

问题描述

我有 ac# 应用程序,它每周 24x7 小时以 kiosk 模式运行(与机器的任何交互都仅限于应用程序本身)。大约 20 天后,出现OutOfMemoryException

FATAL System.OutOfMemoryException: 
in System.Windows.Media.Composition.DUCE.Channel.SyncFlush()
in System.Windows.Media.MediaContext.CompleteRender()
in System.Windows.Interop.HwndTarget.OnResize()
in System.Windows.Interop.HwndTarget.HandleMessage(WindowMessage msg, IntPtr wparam, IntPtr lparam)
in System.Windows.Interop.HwndSource.HwndTargetFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam,  IntPtr lParam, Boolean& handled)
in MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
in MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
in System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
in System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)

异常跟踪没有任何帮助,无论如何我认为这是由于内存泄漏而不是由于异常发生时应用程序正在计算的内容。该应用程序调用 Windows dll 中的非托管代码,我怀疑问题存在,但我不知道如何调查。应用程序启动后,我无法在本地与机器进行交互,并且不知道如何远程检查内存消耗。也许我可以从应用程序本身或 Windows 性能监视器开始记录数据。什么工具可以帮助找到错误?

标签: c#memory-leaks

解决方案


推荐阅读