有没有办法查看C#应用程序的泄漏内存

本文关键字:应用程序 泄漏 内存 有没有 | 更新日期: 2023-09-27 17:57:11

我有一个应用程序,其中包含不同的组件,如Windows Media PlayerImage box等。所有组件均为playing back to backone after another。而一个以Panel为父级的用户控制器,它包含5个GridsGrid是4个Labels的组合。和表单相同的用户控制器有 2 个带有视频和图像的实例。

因此,我的应用程序每秒都会将其承诺的内存大小增加 2MB。一段时间后,我的应用程序由于内存不足而停止。所以我想看看内存在哪个部分或组件中泄漏。

是否有任何免费软件来监控内存泄漏?

有没有办法查看C#应用程序的泄漏内存

监视 中是否存在内存泄漏。NEE,你可以只使用Windows性能监视器。摘自本文:识别和防止托管代码中的内存泄漏:

使用 PerfMon 检查应用程序的以下性能计数器:进程/专用字节、所有堆中的 .NET CLR 内存/# 字节和当前逻辑线程的 .NET CLR 锁和线程/#。进程/专用字节计数器报告为进程独占分配且不能与系统上的其他进程共享的所有内存。".NET CLR 内存/# 所有堆中的字节数"计数器报告第 0 代、第 1 代、第 2 代和大型对象堆的总大小。当前逻辑线程计数器的 .NET CLR LocksAndThreads/# 报告应用程序域中的逻辑线程数。如果应用程序的逻辑线程计数意外增加,则线程堆栈泄漏。如果专用字节数正在增加,但所有堆中的 # 字节数保持稳定,则非托管内存将泄漏。如果两个计数器都在增加,则托管堆中的内存正在增加。

跟踪下载内存泄漏的另一个工具是:调试诊断。它非常有效,而且免费。

"如果怀疑存在用户模式内存泄漏,但不确定是哪个进程导致泄漏,则可以使用性能监视器来测量各个进程的内存使用情况。

请参阅 http://msdn.microsoft.com/en-us/library/windows/hardware/ff560134(v=vs.85).aspx

使用内存性能分析器,如 ANTS Memory Profiler 或 EQATEC

除了 ANTS 或 EQATEC 之外,您还有 JetBrains dotTrace。此外,如果您不想使用探查器,则可以浏览代码并查找一次性对象。每个一次性物品都应在使用结束时丢弃。在大多数情况下,如果您以正确的方式处理了所有对象,您将不再有内存泄漏。

您可能会继续出现内存不足异常的一种情况是,当您进行多线程处理并且您创建的任务多于在一定时间内可以处理的任务时。

你可以

试试Coverity。他们发现的缺陷包括:

  • 内存损坏
  • 崩溃
  • 安全漏洞
  • 并发
  • 未初始化的内存
  • 错误处理
  • 资源泄漏

你可以在这里找到更多。

我建议您使用CLR Profiler,它是免费且可自由分发的应用程序:

CLR Profiler的主要功能是使您能够了解应用程序如何与托管的垃圾回收堆进行交互。您可以调查的一些更重要的事情包括:

  • 谁在托管堆上分配什么。
  • 哪些对象在托管堆上生存。
  • 谁在抓着物体。
  • 垃圾回收器在应用程序的生存期内执行的操作。

有关详细信息,请参阅此链接:

How To: Use CLR Profiler