c# - 如何检测 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 性能监视器开始记录数据。什么工具可以帮助找到错误?
解决方案
推荐阅读
- docker - 编译一个容器化的 rust 应用程序以在 raspberry pi 4 (arm64/armv8) 上运行。无法执行“没有这样的文件或目录”
- java - 我如何在 android studio Game Level Selector-Android studio,java 上创建
- reactjs - onClick 附加到超链接不运行
- javascript - 使用 Javascript 设置值 A 选择
- python - 在 PySpark 上将日期时间转换为日期
- android - 是否可以为 Android 中的 ImageView 或 Button 赋值?
- python - 如何将 python --version stdout 保存到文本文件?
- uwp - 在 UWP NavigationView 中更改后退按钮的前景色
- html - 无法使主标签扩展到显示器中的所有空间
- google-cloud-platform - 如何将请求的响应正文格式化为 Google Cloud Platform API 请求的预测端点