【问题标题】:Winforms / WPF Private bytes Memory Leak? [closed]Winforms / WPF 私有字节内存泄漏? [关闭]
【发布时间】:2014-04-16 20:01:12
【问题描述】:

我正在使用 Visual Studio 2008 处理 Winform / WPF 项目。

它使用多个项目和类将其构建成一个工作产品。

我的问题是,我们注意到内存使用量每秒有 4-8k 泄漏。当然这是一个小泄漏,但它是不间断的连续 4-8k。我们的应用程序会在晚上甚至几天运行。当这几天单独出现时,这个东西已经消耗了比计算机可以处理的更多的内存(通常是 2-3 gigs),并且在 pc 上强制重启是唯一的解决方案。即使除了与我们的主机进行网络通信之外什么都没有发生,这种泄漏也会发生。

通过 ANTS Memory Profiler 对项目进行进一步分析后,我们发现 Private bytes 数据在不断增长。有没有办法知道这些私人数据是从哪里创建的?我没有太多运气用 ANTS 追踪这个问题。步骤会有很大帮助!

私有字节增加的图像(约 45 分钟):

时间线增长图(约 45 分钟):

提前致谢!

【问题讨论】:

  • 我会尝试使用 CPU 分析器。很可能,CPU 用在了哪里,就分配了内存。
  • 托管内存分析器对于诊断非托管内存泄漏毫无帮助。花一些时间寻找环境因素。启用非托管调试并查看调试器的 Debug + Windows + Modules 窗口,确保您看到的所有内容都是您可以考虑的。找到假装保持机器安全和更可用的 cr*pware 的好方法。首先是反恶意软件。

标签: c# wpf winforms memory-leaks red-gate-ants


【解决方案1】:

如果私有字节不断增加,则意味着您有内存泄漏。试试DebugDiag,它来自MS并且免费,也是一个非常好的跟踪Windows内存泄漏的工具。

使用这个工具很简单,首先你用DebugDiag集合创建一个规则来监控你的进程,它会根据你的规则创建内存转储,你可以手动创建内存转储。然后就可以使用DebugDiag Analysis来分析dump了,分析前请设置正确的符号路径。

这篇 MSDN 文章 Identify And Prevent Memory Leaks In Managed Code 也可能有所帮助。本文指出我们如何找出内存泄漏是本机泄漏还是托管泄漏。如果是纯.NET管理泄露,也可以使用CLR profiler来调试问题。

【讨论】:

    猜你喜欢
    • 2013-05-12
    • 1970-01-01
    • 2013-09-20
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 2011-06-28
    • 2013-03-29
    相关资源
    最近更新 更多