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

有没有办法查看C#应用程序泄漏的内存?,c#,wpf,winforms,memory-leaks,C#,Wpf,Winforms,Memory Leaks,我有一个包含不同组件的应用程序,如Windows Media Player,图像框等。所有组件都是背靠背播放或一个接一个。一个以面板为父级的用户控制器包含5个网格,网格是4个标签的组合。以及同一用户控制器具有2个具有视频和图像的实例的表单 由于这一点,我的应用程序每秒钟就会将其提交的内存大小增加2MB。一段时间后,由于内存不足,我的应用程序停止了。所以我想看看内存泄漏在哪个部分或组件中 是否有任何免费软件来监视内存泄漏?“如果您怀疑存在用户模式内存泄漏,但不确定是哪个进程造成的,您可以使用性能监

我有一个包含不同组件的应用程序,如
Windows Media Player
图像框
等。所有组件都是
背靠背播放
一个接一个
。一个以
面板
为父级的用户控制器包含5个
网格
网格
是4个
标签
的组合。以及同一用户控制器具有2个具有视频和图像的实例的表单

由于这一点,我的应用程序每秒钟就会将其提交的内存大小增加2MB。一段时间后,由于内存不足,我的应用程序停止了。所以我想看看内存泄漏在哪个部分或组件中

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

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


请参阅使用内存档案器,如ANTS memory profiler或EQATEC

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

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

  • 谁在托管堆上分配什么
  • 哪些对象保留在托管堆上
  • 谁在抓东西
  • 垃圾收集器在应用程序的整个生命周期中所做的事情
有关更多信息,请参阅此链接:


在ANTS或EQATEC旁边还有JetBrains dotTrace。 另外,如果您不想使用探查器,您可以检查代码并查找一次性对象。每一件一次性物品在使用结束时都应该扔掉。 在大多数情况下,如果您以正确的方式处理了所有对象,那么就不会再有内存泄漏

在一种情况下,您可能会继续出现内存不足异常,即当您使用多线程时,您创建的任务超过了在一定时间内可以处理的任务。

您可以尝试。他们发现的缺陷包括:

  • 内存损坏
  • 撞车
  • 安全漏洞
  • 并发性
  • 未初始化内存
  • 错误处理
  • 资源泄漏

您可能会发现更多信息。

要监视.NEE中是否存在内存泄漏,您可以使用Windows性能监视器。从这篇文章::

使用PerfMon检查应用程序的以下性能计数器:所有堆中的进程/专用字节、.NET CLR内存/#字节,以及当前逻辑线程的.NET CLR锁和线程/#。Process/Private Bytes计数器报告专门为某个进程分配的、不能与系统上其他进程共享的所有内存。NET CLR Memory/#Bytes in All Heaps计数器报告Gen0、Gen1、Gen2和大型对象堆的组合总大小。当前逻辑线程的.NET CLR LocksAndThreads/#计数器报告AppDomain中的逻辑线程数。如果应用程序的逻辑线程计数意外增加,则线程堆栈正在泄漏。如果私有字节在增加,但所有堆中的#字节保持稳定,则非托管内存正在泄漏。如果两个计数器都在增加,则托管堆中的内存正在增加


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

这是免费软件?谢谢@Wasif in Coverity我必须将我的应用程序上传到网站上。我说得对吗@Wasif?谢谢@anatoly看起来不错,但我在一夜之间运行了我的应用程序。早上clr档案器有一个小提示说关闭程序,clr命令提示符说我花了很多时间回复在使用性能监视器的过程中,我可以从我的应用程序中获得总体内存图