【问题标题】:c# wpf memory leakc# wpf 内存泄漏
【发布时间】:2021-08-31 13:27:02
【问题描述】:

我最近制作了一个桌面应用程序,可以与我工作的设备进行通信。

该应用程序的总体思路是给设备(烤箱)一个“设置温度”命令,每 10 秒检查一次当前温度并使用实时图表将其显示在图表上。

此应用程序需要一次运行多天,我认为我似乎遇到了内存泄漏问题。 我的经验是应用程序有一段时间没有响应,然后它变得响应并添加 1 个单个“日志”效果,就像在 LogTemp 函数中一样,大约每 1-2 分钟。应该是每 10 秒一次。

编辑:刚刚阅读此编辑之前的行,我想我不太清楚。它可以正常工作,因为它应该在最初的几个小时内工作。注意到性能仅在 24 小时后才受到打击。

运行 24 小时后,我发现它正在使用超过 800 MB 的 RAM,而且它还在以秒为单位增长。

我怀疑它可能与livecharts 有关,但我不确定。 (24小时后得到8640个数据点)

我没有任何问题披露我的代码,甚至将需要显示的代码量减少到总共大约 200 行,这些代码分为几个不同的功能,但是如果有人听说过实时图表和/或这样的问题可以建议不同类型的图形库,我很乐意将其换掉。

Actually, here's the code, lmao:

https://pastebin.com/YBn5CuD6

我想到的另一件事,可能是我向 ListView 添加了太多行吗?我们正在谈论.. 24 小时内 8640 行。可能和它有关吗?

抱歉发了这么长的帖子,先谢谢了。

【问题讨论】:

  • 您是否尝试过在 Visual Studio 诊断会话下长时间运行它,跟踪内存使用情况?您从中获得的报告可能有助于确定泄漏源。只需转到 调试 >> 性能分析器
  • 这个问题只在几个小时后才出现(我不确定,但我怀疑不到 10-15 小时)而且我没有在此期间更新的集合/绑定恒定循环。发布的代码(不包括我提到的两个函数,但没有发布 SetTemp 和 GetTemp)是唯一运行的代码(在单独的线程上),直到循环完成。我在周期结束之前发现了这个问题。 GUI 本身仅在使用 ListView 和 LiveCharts 图表显示的代码中进行更新。
  • @Joe 我一定会运行它并返回更多信息。谢谢。
  • 这是做什么的? “Database.AddTemperature”我假设您没有保持数据库连接打开等,并且在您的 Db 代码中正确处理表、命令等。
  • 离题 - 与您的内存泄漏无关,但为什么不使用 timer 而不是 while 循环和线程休眠。这将大大简化代码。

标签: c# wpf livecharts


【解决方案1】:

对于任何感兴趣的人,我降低了负责 LiveCharts 图表上有多少点的采样率,即使运行了 3 天,它现在也非常顺利。 (RAM 使用量也在 90 MB 左右,这是我的应用程序所预期的)

我认为这是问题所在,因此我会将其标记为下一个人在谷歌上搜索 LiveCharts 内存泄漏的答案。

谢谢大家的帮助。

【讨论】:

    猜你喜欢
    • 2011-11-05
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 2010-12-05
    相关资源
    最近更新 更多